summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorraveit65 (via Travis CI) <[email protected]>2020-12-10 20:06:18 +0000
committerraveit65 (via Travis CI) <[email protected]>2020-12-10 20:06:18 +0000
commit7d8e6cc34f5a1d101b392981a135b499d3b66119 (patch)
tree4e31aabe6ef988f677b58598c6ccb41df37e7521
downloadlibmateweather-7d8e6cc34f5a1d101b392981a135b499d3b66119.tar.bz2
libmateweather-7d8e6cc34f5a1d101b392981a135b499d3b66119.tar.xz
Deploy mate-desktop/libmateweather to github.com/mate-desktop/libmateweather.git:gh-pages
-rw-r--r--[email protected]_master/index.html131
-rw-r--r--[email protected]_master/report-22c0d3.html2030
-rw-r--r--[email protected]_master/report-565580.html917
-rw-r--r--[email protected]_master/report-57bf16.html433
-rw-r--r--[email protected]_master/report-7ad762.html705
-rw-r--r--[email protected]_master/report-7f5d92.html917
-rw-r--r--[email protected]_master/report-9ce8c7.html2030
-rw-r--r--[email protected]_master/report-a72fed.html925
-rw-r--r--[email protected]_master/report-ae2c61.html705
-rw-r--r--[email protected]_master/report-d460a4.html557
-rw-r--r--[email protected]_master/report-dd38d1.html705
-rw-r--r--[email protected]_master/scanview.css62
-rw-r--r--[email protected]_master/sorttable.js492
-rw-r--r--[email protected]_master/0.html1368
-rw-r--r--[email protected]_master/1.html994
-rw-r--r--[email protected]_master/10.html384
-rw-r--r--[email protected]_master/11.html3562
-rw-r--r--[email protected]_master/2.html708
-rw-r--r--[email protected]_master/3.html330
-rw-r--r--[email protected]_master/4.html350
-rw-r--r--[email protected]_master/5.html336
-rw-r--r--[email protected]_master/6.html1122
-rw-r--r--[email protected]_master/7.html528
-rw-r--r--[email protected]_master/8.html1324
-rw-r--r--[email protected]_master/9.html876
-rw-r--r--[email protected]_master/index.html165
-rw-r--r--[email protected]_master/stats.html119
-rw-r--r--[email protected]_master/style.css137
-rw-r--r--[email protected]_USE_MATE2_MACROS/index.html131
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-0741a9.html917
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-4651e5.html925
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-4d810c.html917
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-5208f2.html705
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-73b580.html557
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-9da9a1.html433
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-b7bfc9.html2030
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-d0e42f.html2030
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-dac547.html705
-rw-r--r--[email protected]_USE_MATE2_MACROS/report-e230d5.html705
-rw-r--r--[email protected]_USE_MATE2_MACROS/scanview.css62
-rw-r--r--[email protected]_USE_MATE2_MACROS/sorttable.js492
-rw-r--r--[email protected]_USE_MATE2_MACROS/0.html1368
-rw-r--r--[email protected]_USE_MATE2_MACROS/1.html994
-rw-r--r--[email protected]_USE_MATE2_MACROS/10.html384
-rw-r--r--[email protected]_USE_MATE2_MACROS/11.html3562
-rw-r--r--[email protected]_USE_MATE2_MACROS/2.html708
-rw-r--r--[email protected]_USE_MATE2_MACROS/3.html330
-rw-r--r--[email protected]_USE_MATE2_MACROS/4.html350
-rw-r--r--[email protected]_USE_MATE2_MACROS/5.html336
-rw-r--r--[email protected]_USE_MATE2_MACROS/6.html1122
-rw-r--r--[email protected]_USE_MATE2_MACROS/7.html528
-rw-r--r--[email protected]_USE_MATE2_MACROS/8.html1324
-rw-r--r--[email protected]_USE_MATE2_MACROS/9.html876
-rw-r--r--[email protected]_USE_MATE2_MACROS/index.html165
-rw-r--r--[email protected]_USE_MATE2_MACROS/stats.html119
-rw-r--r--[email protected]_USE_MATE2_MACROS/style.css137
-rw-r--r--[email protected]_master/index.html131
-rw-r--r--[email protected]_master/report-182943.html705
-rw-r--r--[email protected]_master/report-312812.html557
-rw-r--r--[email protected]_master/report-3be078.html917
-rw-r--r--[email protected]_master/report-5f6e58.html917
-rw-r--r--[email protected]_master/report-65d8b5.html705
-rw-r--r--[email protected]_master/report-8750f3.html2030
-rw-r--r--[email protected]_master/report-956099.html433
-rw-r--r--[email protected]_master/report-b1c4ca.html925
-rw-r--r--[email protected]_master/report-beabf5.html705
-rw-r--r--[email protected]_master/report-ce9da0.html2030
-rw-r--r--[email protected]_master/scanview.css62
-rw-r--r--[email protected]_master/sorttable.js492
-rw-r--r--[email protected]_master/0.html1368
-rw-r--r--[email protected]_master/1.html994
-rw-r--r--[email protected]_master/10.html384
-rw-r--r--[email protected]_master/11.html3562
-rw-r--r--[email protected]_master/2.html708
-rw-r--r--[email protected]_master/3.html330
-rw-r--r--[email protected]_master/4.html350
-rw-r--r--[email protected]_master/5.html336
-rw-r--r--[email protected]_master/6.html1122
-rw-r--r--[email protected]_master/7.html528
-rw-r--r--[email protected]_master/8.html1324
-rw-r--r--[email protected]_master/9.html876
-rw-r--r--[email protected]_master/index.html165
-rw-r--r--[email protected]_master/stats.html119
-rw-r--r--[email protected]_master/style.css137
-rw-r--r--[email protected]_README-i18-LOCATION/index.html131
-rw-r--r--[email protected]_README-i18-LOCATION/report-0641c1.html705
-rw-r--r--[email protected]_README-i18-LOCATION/report-080384.html2030
-rw-r--r--[email protected]_README-i18-LOCATION/report-4d7425.html705
-rw-r--r--[email protected]_README-i18-LOCATION/report-7a46d1.html557
-rw-r--r--[email protected]_README-i18-LOCATION/report-b5419b.html925
-rw-r--r--[email protected]_README-i18-LOCATION/report-da081d.html2030
-rw-r--r--[email protected]_README-i18-LOCATION/report-db8db4.html917
-rw-r--r--[email protected]_README-i18-LOCATION/report-dcd483.html917
-rw-r--r--[email protected]_README-i18-LOCATION/report-f0b2f9.html433
-rw-r--r--[email protected]_README-i18-LOCATION/report-f724ea.html705
-rw-r--r--[email protected]_README-i18-LOCATION/scanview.css62
-rw-r--r--[email protected]_README-i18-LOCATION/sorttable.js492
-rw-r--r--[email protected]_README-i18-LOCATION/0.html1368
-rw-r--r--[email protected]_README-i18-LOCATION/1.html994
-rw-r--r--[email protected]_README-i18-LOCATION/10.html384
-rw-r--r--[email protected]_README-i18-LOCATION/11.html3562
-rw-r--r--[email protected]_README-i18-LOCATION/2.html708
-rw-r--r--[email protected]_README-i18-LOCATION/3.html330
-rw-r--r--[email protected]_README-i18-LOCATION/4.html350
-rw-r--r--[email protected]_README-i18-LOCATION/5.html336
-rw-r--r--[email protected]_README-i18-LOCATION/6.html1122
-rw-r--r--[email protected]_README-i18-LOCATION/7.html528
-rw-r--r--[email protected]_README-i18-LOCATION/8.html1324
-rw-r--r--[email protected]_README-i18-LOCATION/9.html876
-rw-r--r--[email protected]_README-i18-LOCATION/index.html165
-rw-r--r--[email protected]_README-i18-LOCATION/stats.html119
-rw-r--r--[email protected]_README-i18-LOCATION/style.css137
-rw-r--r--[email protected]_master/index.html131
-rw-r--r--[email protected]_master/report-068c2c.html2030
-rw-r--r--[email protected]_master/report-0a2710.html925
-rw-r--r--[email protected]_master/report-0c8436.html705
-rw-r--r--[email protected]_master/report-11da39.html557
-rw-r--r--[email protected]_master/report-2466b3.html917
-rw-r--r--[email protected]_master/report-7166da.html433
-rw-r--r--[email protected]_master/report-a207c9.html705
-rw-r--r--[email protected]_master/report-a561e5.html917
-rw-r--r--[email protected]_master/report-b594e8.html705
-rw-r--r--[email protected]_master/report-c25aa2.html2030
-rw-r--r--[email protected]_master/scanview.css62
-rw-r--r--[email protected]_master/sorttable.js492
-rw-r--r--[email protected]_master/0.html1368
-rw-r--r--[email protected]_master/1.html994
-rw-r--r--[email protected]_master/10.html384
-rw-r--r--[email protected]_master/11.html3562
-rw-r--r--[email protected]_master/2.html708
-rw-r--r--[email protected]_master/3.html330
-rw-r--r--[email protected]_master/4.html350
-rw-r--r--[email protected]_master/5.html336
-rw-r--r--[email protected]_master/6.html1122
-rw-r--r--[email protected]_master/7.html528
-rw-r--r--[email protected]_master/8.html1324
-rw-r--r--[email protected]_master/9.html876
-rw-r--r--[email protected]_master/index.html165
-rw-r--r--[email protected]_master/stats.html119
-rw-r--r--[email protected]_master/style.css137
-rw-r--r--[email protected]_README-typo/index.html131
-rw-r--r--[email protected]_README-typo/report-1298a7.html705
-rw-r--r--[email protected]_README-typo/report-2c6560.html2030
-rw-r--r--[email protected]_README-typo/report-7f5301.html925
-rw-r--r--[email protected]_README-typo/report-8ac26c.html705
-rw-r--r--[email protected]_README-typo/report-8d2266.html557
-rw-r--r--2020-11-28-212732-5799[email protected]_README-typo/report-94aa15.html2030
-rw-r--r--[email protected]_README-typo/report-99181e.html917
-rw-r--r--[email protected]_README-typo/report-aac29d.html705
-rw-r--r--[email protected]_README-typo/report-b7630e.html433
-rw-r--r--[email protected]_README-typo/report-def332.html917
-rw-r--r--[email protected]_README-typo/scanview.css62
-rw-r--r--[email protected]_README-typo/sorttable.js492
-rw-r--r--[email protected]_README-typo/0.html1368
-rw-r--r--[email protected]_README-typo/1.html994
-rw-r--r--[email protected]_README-typo/10.html384
-rw-r--r--[email protected]_README-typo/11.html3562
-rw-r--r--[email protected]_README-typo/2.html708
-rw-r--r--[email protected]_README-typo/3.html330
-rw-r--r--[email protected]_README-typo/4.html350
-rw-r--r--[email protected]_README-typo/5.html336
-rw-r--r--[email protected]_README-typo/6.html1122
-rw-r--r--[email protected]_README-typo/7.html528
-rw-r--r--[email protected]_README-typo/8.html1324
-rw-r--r--[email protected]_README-typo/9.html876
-rw-r--r--[email protected]_README-typo/index.html165
-rw-r--r--[email protected]_README-typo/stats.html119
-rw-r--r--[email protected]_README-typo/style.css137
-rw-r--r--[email protected]_fallback/index.html131
-rw-r--r--[email protected]_fallback/report-09daff.html2030
-rw-r--r--[email protected]_fallback/report-18f193.html705
-rw-r--r--[email protected]_fallback/report-328456.html925
-rw-r--r--[email protected]_fallback/report-3f485d.html705
-rw-r--r--[email protected]_fallback/report-4dc92a.html557
-rw-r--r--[email protected]_fallback/report-57154e.html2030
-rw-r--r--[email protected]_fallback/report-74447b.html705
-rw-r--r--[email protected]_fallback/report-858b73.html917
-rw-r--r--[email protected]_fallback/report-96cada.html917
-rw-r--r--[email protected]_fallback/report-daf830.html433
-rw-r--r--[email protected]_fallback/scanview.css62
-rw-r--r--[email protected]_fallback/sorttable.js492
-rw-r--r--[email protected]_fallback/0.html1368
-rw-r--r--[email protected]_fallback/1.html994
-rw-r--r--[email protected]_fallback/10.html384
-rw-r--r--[email protected]_fallback/11.html3562
-rw-r--r--[email protected]_fallback/2.html708
-rw-r--r--2020-12-03-100[email protected]_fallback/3.html330
-rw-r--r--[email protected]_fallback/4.html350
-rw-r--r--[email protected]_fallback/5.html336
-rw-r--r--[email protected]_fallback/6.html1122
-rw-r--r--[email protected]_fallback/7.html528
-rw-r--r--[email protected]_fallback/8.html1324
-rw-r--r--[email protected]_fallback/9.html876
-rw-r--r--[email protected]_fallback/index.html165
-rw-r--r--[email protected]_fallback/stats.html119
-rw-r--r--[email protected]_fallback/style.css137
-rw-r--r--[email protected]_master/index.html131
-rw-r--r--[email protected]_master/report-45e2cb.html705
-rw-r--r--[email protected]_master/report-634d09.html917
-rw-r--r--[email protected]_master/report-8d0a69.html925
-rw-r--r--[email protected]_master/report-9c5ce7.html705
-rw-r--r--[email protected]_master/report-aad064.html433
-rw-r--r--[email protected]_master/report-e78815.html2030
-rw-r--r--[email protected]_master/report-e9edb2.html557
-rw-r--r--[email protected]_master/report-f0a8d9.html917
-rw-r--r--[email protected]_master/report-f9ba7d.html2030
-rw-r--r--[email protected]_master/report-f9eb3e.html705
-rw-r--r--[email protected]_master/scanview.css62
-rw-r--r--[email protected]_master/sorttable.js492
-rw-r--r--[email protected]_master/0.html1368
-rw-r--r--[email protected]_master/1.html994
-rw-r--r--[email protected]_master/10.html384
-rw-r--r--[email protected]_master/11.html3562
-rw-r--r--[email protected]_master/2.html708
-rw-r--r--[email protected]_master/3.html330
-rw-r--r--[email protected]_master/4.html350
-rw-r--r--[email protected]_master/5.html336
-rw-r--r--[email protected]_master/6.html1122
-rw-r--r--[email protected]_master/7.html528
-rw-r--r--[email protected]_master/8.html1324
-rw-r--r--[email protected]_master/9.html876
-rw-r--r--[email protected]_master/index.html165
-rw-r--r--[email protected]_master/stats.html119
-rw-r--r--[email protected]_master/style.css137
-rw-r--r--[email protected]_master/index.html131
-rw-r--r--[email protected]_master/report-09d374.html705
-rw-r--r--[email protected]_master/report-0b3a1f.html557
-rw-r--r--[email protected]_master/report-4297c8.html705
-rw-r--r--[email protected]_master/report-4793b6.html705
-rw-r--r--[email protected]_master/report-747b6a.html917
-rw-r--r--[email protected]_master/report-7ec349.html2030
-rw-r--r--[email protected]_master/report-8e2595.html433
-rw-r--r--[email protected]_master/report-c73c91.html917
-rw-r--r--[email protected]_master/report-e26e75.html925
-rw-r--r--[email protected]_master/report-f1718b.html2030
-rw-r--r--[email protected]_master/scanview.css62
-rw-r--r--[email protected]_master/sorttable.js492
-rw-r--r--[email protected]_master/0.html1368
-rw-r--r--[email protected]_master/1.html994
-rw-r--r--[email protected]_master/10.html384
-rw-r--r--[email protected]_master/11.html3562
-rw-r--r--[email protected]_master/2.html708
-rw-r--r--[email protected]_master/3.html330
-rw-r--r--[email protected]_master/4.html350
-rw-r--r--[email protected]_master/5.html336
-rw-r--r--[email protected]_master/6.html1122
-rw-r--r--[email protected]_master/7.html528
-rw-r--r--[email protected]_master/8.html1324
-rw-r--r--[email protected]_master/9.html876
-rw-r--r--[email protected]_master/index.html165
-rw-r--r--[email protected]_master/stats.html119
-rw-r--r--[email protected]_master/style.css137
-rw-r--r--[email protected]_master/index.html131
-rw-r--r--[email protected]_master/report-69e3c1.html433
-rw-r--r--[email protected]_master/report-7bac52.html2030
-rw-r--r--[email protected]_master/report-80b565.html925
-rw-r--r--[email protected]_master/report-919971.html705
-rw-r--r--[email protected]_master/report-9d756d.html917
-rw-r--r--[email protected]_master/report-a57df7.html2030
-rw-r--r--[email protected]_master/report-b5d653.html705
-rw-r--r--[email protected]_master/report-cbdc18.html705
-rw-r--r--[email protected]_master/report-dc17ea.html557
-rw-r--r--[email protected]_master/report-e56eb8.html917
-rw-r--r--[email protected]_master/scanview.css62
-rw-r--r--[email protected]_master/sorttable.js492
-rw-r--r--[email protected]_master/0.html1368
-rw-r--r--[email protected]_master/1.html994
-rw-r--r--2020-12-10-200446-15[email protected]_master/10.html384
-rw-r--r--[email protected]_master/11.html3562
-rw-r--r--[email protected]_master/2.html708
-rw-r--r--[email protected]_master/3.html330
-rw-r--r--[email protected]_master/4.html350
-rw-r--r--[email protected]_master/5.html336
-rw-r--r--[email protected]_master/6.html1122
-rw-r--r--[email protected]_master/7.html528
-rw-r--r--[email protected]_master/8.html1324
-rw-r--r--[email protected]_master/9.html876
-rw-r--r--[email protected]_master/index.html165
-rw-r--r--[email protected]_master/stats.html119
-rw-r--r--[email protected]_master/style.css137
-rw-r--r--CNAME1
-rw-r--r--index.html46
282 files changed, 229167 insertions, 0 deletions
diff --git a/[email protected]_master/index.html b/[email protected]_master/index.html
new file mode 100644
index 0000000..4317c07
--- /dev/null
+++ b/[email protected]_master/index.html
@@ -0,0 +1,131 @@
+<html>
+<head>
+<title>rootdir - scan-build results</title>
+<link type="text/css" rel="stylesheet" href="scanview.css"/>
+<script src="sorttable.js"></script>
+<script language='javascript' type="text/javascript">
+function SetDisplay(RowClass, DisplayVal)
+{
+ var Rows = document.getElementsByTagName("tr");
+ for ( var i = 0 ; i < Rows.length; ++i ) {
+ if (Rows[i].className == RowClass) {
+ Rows[i].style.display = DisplayVal;
+ }
+ }
+}
+
+function CopyCheckedStateToCheckButtons(SummaryCheckButton) {
+ var Inputs = document.getElementsByTagName("input");
+ for ( var i = 0 ; i < Inputs.length; ++i ) {
+ if (Inputs[i].type == "checkbox") {
+ if(Inputs[i] != SummaryCheckButton) {
+ Inputs[i].checked = SummaryCheckButton.checked;
+ Inputs[i].onclick();
+ }
+ }
+ }
+}
+
+function returnObjById( id ) {
+ if (document.getElementById)
+ var returnVar = document.getElementById(id);
+ else if (document.all)
+ var returnVar = document.all[id];
+ else if (document.layers)
+ var returnVar = document.layers[id];
+ return returnVar;
+}
+
+var NumUnchecked = 0;
+
+function ToggleDisplay(CheckButton, ClassName) {
+ if (CheckButton.checked) {
+ SetDisplay(ClassName, "");
+ if (--NumUnchecked == 0) {
+ returnObjById("AllBugsCheck").checked = true;
+ }
+ }
+ else {
+ SetDisplay(ClassName, "none");
+ NumUnchecked++;
+ returnObjById("AllBugsCheck").checked = false;
+ }
+}
+</script>
+<!-- SUMMARYENDHEAD -->
+</head>
+<body>
+<h1>rootdir - scan-build results</h1>
+
+<table>
+<tr><th>User:</th><td>[email protected]</td></tr>
+<tr><th>Working Directory:</th><td>/rootdir</td></tr>
+<tr><th>Command Line:</th><td>make -j 2</td></tr>
+<tr><th>Clang Version:</th><td>clang version 11.0.0 (Fedora 11.0.0-2.fc33)
+</td></tr>
+<tr><th>Date:</th><td>Wed Nov 18 21:20:44 2020</td></tr>
+</table>
+<h2>Bug Summary</h2><table>
+<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead>
+<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">10</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr>
+<tr><th>Dead code</th><th colspan=2></th></tr>
+<tr><td class="SUMM_DESC">Unreachable code</td><td class="Q">2</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_dead_code_unreachable_code');" checked/></center></td></tr>
+<tr><th>Dead store</th><th colspan=2></th></tr>
+<tr><td class="SUMM_DESC">Dead assignment</td><td class="Q">2</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_dead_store_dead_assignment');" checked/></center></td></tr>
+<tr><td class="SUMM_DESC">Dead initialization</td><td class="Q">2</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_dead_store_dead_initialization');" checked/></center></td></tr>
+<tr><th>Logic error</th><th colspan=2></th></tr>
+<tr><td class="SUMM_DESC">Dereference of null pointer</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_dereference_of_null_pointer');" checked/></center></td></tr>
+<tr><td class="SUMM_DESC">Out-of-bound access</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_out-of-bound_access');" checked/></center></td></tr>
+<tr><th>Security</th><th colspan=2></th></tr>
+<tr><td class="SUMM_DESC">Potential insecure memory buffer bounds restriction in call 'strcpy'</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcpy_');" checked/></center></td></tr>
+<tr><th>Unix Stream API Error</th><th colspan=2></th></tr>
+<tr><td class="SUMM_DESC">Resource Leak</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_unix_stream_api_error_resource_leak');" checked/></center></td></tr>
+</table>
+<h2>Reports</h2>
+
+<table class="sortable" style="table-layout:automatic">
+<thead><tr>
+ <td>Bug Group</td>
+ <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind">&nbsp;&#x25BE;</span></td>
+ <td>File</td>
+ <td>Function/Method</td>
+ <td class="Q">Line</td>
+ <td class="Q">Path Length</td>
+ <td class="sorttable_nosort"></td>
+ <!-- REPORTBUGCOL -->
+</tr></thead>
+<tbody>
+<tr class="bt_dead_store_dead_assignment"><td class="DESC">Dead store</td><td class="DESC">Dead assignment</td><td>weather-metar.c</td><td class="DESC">metar_parse</td><td class="Q">454</td><td class="Q">1</td><td><a href="report-565580.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-565580.html" -->
+</tr>
+<tr class="bt_dead_store_dead_assignment"><td class="DESC">Dead store</td><td class="DESC">Dead assignment</td><td>weather.c</td><td class="DESC">_weather_info_fill</td><td class="Q">498</td><td class="Q">1</td><td><a href="report-9ce8c7.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-9ce8c7.html" -->
+</tr>
+<tr class="bt_dead_store_dead_initialization"><td class="DESC">Dead store</td><td class="DESC">Dead initialization</td><td>weather-sun.c</td><td class="DESC">calc_sun2</td><td class="Q">164</td><td class="Q">1</td><td><a href="report-7ad762.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-7ad762.html" -->
+</tr>
+<tr class="bt_dead_store_dead_initialization"><td class="DESC">Dead store</td><td class="DESC">Dead initialization</td><td>weather-sun.c</td><td class="DESC">calc_sun2</td><td class="Q">165</td><td class="Q">1</td><td><a href="report-dd38d1.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-dd38d1.html" -->
+</tr>
+<tr class="bt_logic_error_dereference_of_null_pointer"><td class="DESC">Logic error</td><td class="DESC">Dereference of null pointer</td><td>weather-met.c</td><td class="DESC">met_reprocess</td><td class="Q">111</td><td class="Q">27</td><td><a href="report-d460a4.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-d460a4.html" -->
+</tr>
+<tr class="bt_logic_error_out-of-bound_access"><td class="DESC">Logic error</td><td class="DESC">Out-of-bound access</td><td>weather-metar.c</td><td class="DESC">metar_tok_vis</td><td class="Q">169</td><td class="Q">9</td><td><a href="report-a72fed.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-a72fed.html" -->
+</tr>
+<tr class="bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcpy_"><td class="DESC">Security</td><td class="DESC">Potential insecure memory buffer bounds restriction in call 'strcpy'</td><td>weather.c</td><td class="DESC">weather_info_get_update</td><td class="Q">725</td><td class="Q">1</td><td><a href="report-22c0d3.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-22c0d3.html" -->
+</tr>
+<tr class="bt_unix_stream_api_error_resource_leak"><td class="DESC">Unix Stream API Error</td><td class="DESC">Resource Leak</td><td>test_metar.c</td><td class="DESC">main</td><td class="Q">73</td><td class="Q">8</td><td><a href="report-57bf16.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-57bf16.html" -->
+</tr>
+<tr class="bt_dead_code_unreachable_code"><td class="DESC">Dead code</td><td class="DESC">Unreachable code</td><td>weather-metar.c</td><td class="DESC">metar_tok_vis</td><td class="Q">177</td><td class="Q">1</td><td><a href="report-7f5d92.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-7f5d92.html" -->
+</tr>
+<tr class="bt_dead_code_unreachable_code"><td class="DESC">Dead code</td><td class="DESC">Unreachable code</td><td>weather-sun.c</td><td class="DESC">weather_info_next_sun_event</td><td class="Q">339</td><td class="Q">1</td><td><a href="report-ae2c61.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-ae2c61.html" -->
+</tr>
+</tbody>
+</table>
+
+</body></html>
diff --git a/[email protected]_master/report-22c0d3.html b/[email protected]_master/report-22c0d3.html
new file mode 100644
index 0000000..f147a71
--- /dev/null
+++ b/[email protected]_master/report-22c0d3.html
@@ -0,0 +1,2030 @@
+<!doctype html>
+<html>
+<head>
+<title>weather.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 -->
+
+<!-- BUGTYPE Potential insecure memory buffer bounds restriction in call 'strcpy' -->
+
+<!-- BUGCATEGORY Security -->
+
+<!-- BUGFILE /rootdir/libmateweather/weather.c -->
+
+<!-- FILENAME weather.c -->
+
+<!-- FUNCTIONNAME weather_info_get_update -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 9e62c0dc8b466d7b75780ad89f08c6b7 -->
+
+<!-- BUGLINE 725 -->
+
+<!-- BUGCOLUMN 2 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>weather.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 725, column 2</a><br />Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name weather.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/11.0.0 -D HAVE_CONFIG_H -I . -I .. -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I .. -I . -I /usr/include/libxml2 -I /usr/include/libsoup-2.4 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/libxml2 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -D G_LOG_DOMAIN="MateWeather" -D MATELOCALEDIR="/usr/local/share/locale" -D MATEWEATHER_XML_LOCATION_DIR="/usr/local/share/libmateweather" -D PIC -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/11.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-sign-compare -fdebug-compilation-dir /rootdir/libmateweather -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2020-11-18-212044-5793-1 -x c weather.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"725": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "S") {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].checked = !checked;
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+</form>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ s.classList.remove("selected");
+ });
+ el.classList.add("selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+}
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "j") {
+ navigateTo(/*up=*/false);
+ } else if (event.key == "k") {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"><span class='comment'>/* weather.c - Overall weather server functions</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* along with this program; if not, see</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* &lt;http://www.gnu.org/licenses/&gt;.</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_CONFIG_H<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"><span class='directive'>#include &lt;config.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;assert.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;ctype.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;math.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fenv.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#ifdef HAVE_VALUES_H</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;values.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;time.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include &lt;gdk-pixbuf/gdk-pixbuf.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span></td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='directive'>#include "weather.h"</span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='directive'>#include "weather-priv.h"</span></td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='directive'>#define <span class='macro'>MOON_PHASES<span class='macro_popup'>36</span></span> 36</span></td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='comment'>/**</span></td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>* SECTION:weather</span></td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>* @Title: weather</span></td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> _weather_internal_check (<span class='keyword'>void</span>);</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>inline</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">mateweather_gettext_init (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>static</span> gsize mateweather_gettext_initialized = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>G_UNLIKELY (g_once_init_enter (&amp;mateweather_gettext_initialized))<span class='macro_popup'>(__builtin_expect (__extension__ ({ int _g_boolean_var_; if (<br>(__extension__ ({ _Static_assert (sizeof *(&amp;mateweather_gettext_initialized<br>) == sizeof (gpointer), "Expression evaluates to false"); (void<br>) (0 ? (gpointer) *(&amp;mateweather_gettext_initialized) : (<br>(void*)0)); (!(__extension__ ({ _Static_assert (sizeof *(&amp;<br>mateweather_gettext_initialized) == sizeof (gpointer), "Expression evaluates to false"<br>); gpointer gapg_temp_newval; gpointer *gapg_temp_atomic = (gpointer<br> *)(&amp;mateweather_gettext_initialized); __atomic_load (gapg_temp_atomic<br>, &amp;gapg_temp_newval, 5); gapg_temp_newval; })) &amp;&amp;<br> g_once_init_enter (&amp;mateweather_gettext_initialized)); }<br>))) _g_boolean_var_ = 1; else _g_boolean_var_ = 0; _g_boolean_var_<br>; }), 0))</span></span>) {</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> bindtextdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"libmateweather"</span></span>, <span class='macro'>MATELOCALEDIR<span class='macro_popup'>"/usr/local/share/locale"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='directive'>#ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> bind_textdomain_codeset (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"libmateweather"</span></span>, <span class='string_literal'>"UTF-8"</span>);</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='macro'>g_once_init_leave (&amp;mateweather_gettext_initialized, TRUE)<span class='macro_popup'>(__extension__ ({ _Static_assert (sizeof *(&amp;mateweather_gettext_initialized<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;mateweather_gettext_initialized) = ((!(0)))) :<br> (void) 0; g_once_init_leave ((&amp;mateweather_gettext_initialized<br>), (gsize) ((!(0)))); }))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"><span class='keyword'>const</span> <span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line">mateweather_gettext (<span class='keyword'>const</span> <span class='keyword'>char</span> *str)</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> mateweather_gettext_init ();</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>dgettext (GETTEXT_PACKAGE, str)<span class='macro_popup'>dcgettext ("libmateweather", str, 5)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"><span class='keyword'>const</span> <span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line">mateweather_dpgettext (<span class='keyword'>const</span> <span class='keyword'>char</span> *context,</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *str)</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> mateweather_gettext_init ();</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> <span class='keyword'>return</span> g_dpgettext2 (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"libmateweather"</span></span>, context, str);</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='comment'>* Convert string of the form "DD-MM-SSH" to radians</span></td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='comment'>* DD:degrees (to 3 digits), MM:minutes, SS:seconds H:hemisphere (NESW)</span></td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> <span class='comment'>* Return value is positive for N,E; negative for S,W.</span></td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"><span class='keyword'>static</span> gdouble</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line">dmsh2rad (<span class='keyword'>const</span> gchar *latlon)</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>char</span> *p1, *p2;</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='keyword'>int</span> deg, min, sec, dir;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> gdouble value;</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>if</span> (latlon == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>DBL_MAX<span class='macro_popup'>1.7976931348623157e+308</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> p1 = strchr (latlon, '-');</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> p2 = strrchr (latlon, '-');</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> <span class='keyword'>if</span> (p1 == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || p1 == latlon) {</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>DBL_MAX<span class='macro_popup'>1.7976931348623157e+308</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (p1 == p2) {</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> sscanf (latlon, <span class='string_literal'>"%d-%d"</span>, &amp;deg, &amp;min);</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> sec = 0;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (p2 == 1 + p1) {</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>DBL_MAX<span class='macro_popup'>1.7976931348623157e+308</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> sscanf (latlon, <span class='string_literal'>"%d-%d-%d"</span>, &amp;deg, &amp;min, &amp;sec);</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>if</span> (deg &gt; 180 || min &gt;= 60 || sec &gt;= 60)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>DBL_MAX<span class='macro_popup'>1.7976931348623157e+308</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> value = (gdouble)((deg * 60 + min) * 60 + sec) * <span class='macro'>M_PI<span class='macro_popup'>3.14159265358979323846</span></span> / 648000.;</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> dir = g_ascii_toupper (latlon[strlen (latlon) - 1]);</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (dir == 'W' || dir == 'S')</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> value = -value;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (dir != 'E' &amp;&amp; dir != 'N' &amp;&amp; (value != 0.0 || dir != '0'))</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> value = <span class='macro'>DBL_MAX<span class='macro_popup'>1.7976931348623157e+308</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>return</span> value;</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line">WeatherLocation *</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line">weather_location_new (<span class='keyword'>const</span> gchar *name, <span class='keyword'>const</span> gchar *code,</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>const</span> gchar *zone, <span class='keyword'>const</span> gchar *radar,</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> <span class='keyword'>const</span> gchar *coordinates,</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> <span class='keyword'>const</span> gchar *country_code,</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>const</span> gchar *tz_hint)</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> WeatherLocation *location;</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> _weather_internal_check ();</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> location = <span class='macro'>g_new (WeatherLocation, 1)<span class='macro_popup'>(WeatherLocation *) (__extension__ ({ gsize __n = (gsize) (1)<br>; gsize __s = sizeof (WeatherLocation); gpointer __p; if (__s<br> == 1) __p = g_malloc (__n); else if (__builtin_constant_p (__n<br>) &amp;&amp; (__s == 0 || __n &lt;= (9223372036854775807L *2UL<br>+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> <span class='comment'>/* name and metar code must be set */</span></td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> location-&gt;name = g_strdup (name);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> location-&gt;code = g_strdup (code);</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>if</span> (zone) {</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> location-&gt;zone = g_strdup (zone);</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> location-&gt;zone = g_strdup (<span class='string_literal'>"------"</span>);</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>if</span> (radar) {</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> location-&gt;radar = g_strdup (radar);</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> location-&gt;radar = g_strdup (<span class='string_literal'>"---"</span>);</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>if</span> (location-&gt;zone[0] == '-') {</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> location-&gt;zone_valid = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> location-&gt;zone_valid = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> location-&gt;coordinates = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> <span class='keyword'>if</span> (coordinates)</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='keyword'>char</span> **pieces;</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> pieces = g_strsplit (coordinates, <span class='string_literal'>" "</span>, -1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='keyword'>if</span> (g_strv_length (pieces) == 2)</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> location-&gt;coordinates = g_strdup (coordinates);</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> location-&gt;latitude = dmsh2rad (pieces[0]);</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> location-&gt;longitude = dmsh2rad (pieces[1]);</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> g_strfreev (pieces);</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='keyword'>if</span> (!location-&gt;coordinates)</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> location-&gt;coordinates = g_strdup (<span class='string_literal'>"---"</span>);</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> location-&gt;latitude = <span class='macro'>DBL_MAX<span class='macro_popup'>1.7976931348623157e+308</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> location-&gt;longitude = <span class='macro'>DBL_MAX<span class='macro_popup'>1.7976931348623157e+308</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> location-&gt;latlon_valid = (location-&gt;latitude &lt; <span class='macro'>DBL_MAX<span class='macro_popup'>1.7976931348623157e+308</span></span> &amp;&amp; location-&gt;longitude &lt; <span class='macro'>DBL_MAX<span class='macro_popup'>1.7976931348623157e+308</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> location-&gt;country_code = g_strdup (country_code);</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> location-&gt;tz_hint = g_strdup (tz_hint);</td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='keyword'>return</span> location;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line">WeatherLocation *</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line">weather_location_clone (<span class='keyword'>const</span> WeatherLocation *location)</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> WeatherLocation *clone;</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='macro'>g_return_val_if_fail (location != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (location != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "location != NULL"<br>); return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> clone = weather_location_new (location-&gt;name,</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> location-&gt;code, location-&gt;zone,</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> location-&gt;radar, location-&gt;coordinates,</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> location-&gt;country_code, location-&gt;tz_hint);</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> clone-&gt;latitude = location-&gt;latitude;</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> clone-&gt;longitude = location-&gt;longitude;</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> clone-&gt;latlon_valid = location-&gt;latlon_valid;</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>return</span> clone;</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line">weather_location_free (WeatherLocation *location)</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (location) {</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> g_free (location-&gt;name);</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> g_free (location-&gt;code);</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> g_free (location-&gt;zone);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> g_free (location-&gt;radar);</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> g_free (location-&gt;coordinates);</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> g_free (location-&gt;country_code);</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> g_free (location-&gt;tz_hint);</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> g_free (location);</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line">weather_location_equal (<span class='keyword'>const</span> WeatherLocation *location1, <span class='keyword'>const</span> WeatherLocation *location2)</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> <span class='comment'>/* if something is NULL, then it's TRUE if and only if both are NULL) */</span></td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='keyword'>if</span> (location1 == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || location2 == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> <span class='keyword'>return</span> (location1 == location2);</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> <span class='keyword'>if</span> (!location1-&gt;code || !location2-&gt;code)</td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> <span class='keyword'>return</span> (location1-&gt;code == location2-&gt;code);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> <span class='keyword'>if</span> (!location1-&gt;name || !location2-&gt;name)</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> <span class='keyword'>return</span> (location1-&gt;name == location2-&gt;name);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> <span class='keyword'>return</span> ((strcmp (location1-&gt;code, location2-&gt;code) == 0) &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> (strcmp (location1-&gt;name, location2-&gt;name) == 0));</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>const</span> gchar *wind_direction_str[] = {</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Variable"</span>)<span class='macro_popup'>("Variable")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"North"</span>)<span class='macro_popup'>("North")</span></span>, <span class='macro'>N_(<span class='string_literal'>"North - NorthEast"</span>)<span class='macro_popup'>("North - NorthEast")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Northeast"</span>)<span class='macro_popup'>("Northeast")</span></span>, <span class='macro'>N_(<span class='string_literal'>"East - NorthEast"</span>)<span class='macro_popup'>("East - NorthEast")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"East"</span>)<span class='macro_popup'>("East")</span></span>, <span class='macro'>N_(<span class='string_literal'>"East - Southeast"</span>)<span class='macro_popup'>("East - Southeast")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Southeast"</span>)<span class='macro_popup'>("Southeast")</span></span>, <span class='macro'>N_(<span class='string_literal'>"South - Southeast"</span>)<span class='macro_popup'>("South - Southeast")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"South"</span>)<span class='macro_popup'>("South")</span></span>, <span class='macro'>N_(<span class='string_literal'>"South - Southwest"</span>)<span class='macro_popup'>("South - Southwest")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Southwest"</span>)<span class='macro_popup'>("Southwest")</span></span>, <span class='macro'>N_(<span class='string_literal'>"West - Southwest"</span>)<span class='macro_popup'>("West - Southwest")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"West"</span>)<span class='macro_popup'>("West")</span></span>, <span class='macro'>N_(<span class='string_literal'>"West - Northwest"</span>)<span class='macro_popup'>("West - Northwest")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Northwest"</span>)<span class='macro_popup'>("Northwest")</span></span>, <span class='macro'>N_(<span class='string_literal'>"North - Northwest"</span>)<span class='macro_popup'>("North - Northwest")</span></span></td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line">weather_wind_direction_string (WeatherWindDirection wind)</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>if</span> (wind &lt;= WIND_INVALID || wind &gt;= WIND_LAST)</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Invalid"</span>)<span class='macro_popup'>(mateweather_gettext ("Invalid"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(wind_direction_str[(<span class='keyword'>int</span>)wind])<span class='macro_popup'>(mateweather_gettext (wind_direction_str[(int)wind]))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>const</span> gchar *sky_str[] = {</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Clear Sky"</span>)<span class='macro_popup'>("Clear Sky")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Broken clouds"</span>)<span class='macro_popup'>("Broken clouds")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Scattered clouds"</span>)<span class='macro_popup'>("Scattered clouds")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Few clouds"</span>)<span class='macro_popup'>("Few clouds")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Overcast"</span>)<span class='macro_popup'>("Overcast")</span></span></td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line">weather_sky_string (WeatherSky sky)</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> <span class='keyword'>if</span> (sky &lt;= SKY_INVALID || sky &gt;= SKY_LAST)</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Invalid"</span>)<span class='macro_popup'>(mateweather_gettext ("Invalid"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(sky_str[(<span class='keyword'>int</span>)sky])<span class='macro_popup'>(mateweather_gettext (sky_str[(int)sky]))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='comment'>* Even though tedious, I switched to a 2D array for weather condition</span></td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> <span class='comment'>* strings, in order to facilitate internationalization, esp. for languages</span></td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> <span class='comment'>* with genders.</span></td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='comment'>* Almost all reportable combinations listed in</span></td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='comment'>* http://www.crh.noaa.gov/arx/wx.tbl.php are entered below, except those</span></td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> <span class='comment'>* having 2 qualifiers mixed together [such as "Blowing snow in vicinity"</span></td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='comment'>* (VCBLSN), "Thunderstorm in vicinity" (VCTS), etc].</span></td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> <span class='comment'>* Combinations that are not possible are filled in with "??".</span></td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> <span class='comment'>* Some other exceptions not handled yet, such as "SN BLSN" which has</span></td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='comment'>* special meaning.</span></td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>* Note, magic numbers, when you change the size here, make sure to change</span></td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='comment'>* the below function so that new values are recognized</span></td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"><span class='comment'>/* NONE VICINITY LIGHT MODERATE HEAVY SHALLOW PATCHES PARTIAL THUNDERSTORM BLOWING SHOWERS DRIFTING FREEZING */</span></td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"><span class='comment'>/* *******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/</span></td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>const</span> gchar *conditions_str[24][13] = {</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"><span class='comment'>/* Translators: If you want to know what "blowing" "shallow" "partial"</span></td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='comment'>* etc means, you can go to http://www.weather.com/glossary/ and</span></td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='comment'>* http://www.crh.noaa.gov/arx/wx.tbl.php */</span></td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='comment'>/* NONE */</span> {<span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Thunderstorm"</span>)<span class='macro_popup'>("Thunderstorm")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> <span class='comment'>/* DRIZZLE */</span> {<span class='macro'>N_(<span class='string_literal'>"Drizzle"</span>)<span class='macro_popup'>("Drizzle")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Light drizzle"</span>)<span class='macro_popup'>("Light drizzle")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Moderate drizzle"</span>)<span class='macro_popup'>("Moderate drizzle")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Heavy drizzle"</span>)<span class='macro_popup'>("Heavy drizzle")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Freezing drizzle"</span>)<span class='macro_popup'>("Freezing drizzle")</span></span> },</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='comment'>/* RAIN */</span> {<span class='macro'>N_(<span class='string_literal'>"Rain"</span>)<span class='macro_popup'>("Rain")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Light rain"</span>)<span class='macro_popup'>("Light rain")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Moderate rain"</span>)<span class='macro_popup'>("Moderate rain")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Heavy rain"</span>)<span class='macro_popup'>("Heavy rain")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Thunderstorm"</span>)<span class='macro_popup'>("Thunderstorm")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Rain showers"</span>)<span class='macro_popup'>("Rain showers")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Freezing rain"</span>)<span class='macro_popup'>("Freezing rain")</span></span> },</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> <span class='comment'>/* SNOW */</span> {<span class='macro'>N_(<span class='string_literal'>"Snow"</span>)<span class='macro_popup'>("Snow")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Light snow"</span>)<span class='macro_popup'>("Light snow")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Moderate snow"</span>)<span class='macro_popup'>("Moderate snow")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Heavy snow"</span>)<span class='macro_popup'>("Heavy snow")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Snowstorm"</span>)<span class='macro_popup'>("Snowstorm")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Blowing snowfall"</span>)<span class='macro_popup'>("Blowing snowfall")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Snow showers"</span>)<span class='macro_popup'>("Snow showers")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Drifting snow"</span>)<span class='macro_popup'>("Drifting snow")</span></span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='comment'>/* SNOW_GRAINS */</span> {<span class='macro'>N_(<span class='string_literal'>"Snow grains"</span>)<span class='macro_popup'>("Snow grains")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Light snow grains"</span>)<span class='macro_popup'>("Light snow grains")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Moderate snow grains"</span>)<span class='macro_popup'>("Moderate snow grains")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Heavy snow grains"</span>)<span class='macro_popup'>("Heavy snow grains")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='comment'>/* ICE_CRYSTALS */</span> {<span class='macro'>N_(<span class='string_literal'>"Ice crystals"</span>)<span class='macro_popup'>("Ice crystals")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Ice crystals"</span>)<span class='macro_popup'>("Ice crystals")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> <span class='comment'>/* ICE_PELLETS */</span> {<span class='macro'>N_(<span class='string_literal'>"Ice pellets"</span>)<span class='macro_popup'>("Ice pellets")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Few ice pellets"</span>)<span class='macro_popup'>("Few ice pellets")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Moderate ice pellets"</span>)<span class='macro_popup'>("Moderate ice pellets")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Heavy ice pellets"</span>)<span class='macro_popup'>("Heavy ice pellets")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Ice pellet storm"</span>)<span class='macro_popup'>("Ice pellet storm")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Showers of ice pellets"</span>)<span class='macro_popup'>("Showers of ice pellets")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> <span class='comment'>/* HAIL */</span> {<span class='macro'>N_(<span class='string_literal'>"Hail"</span>)<span class='macro_popup'>("Hail")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Hail"</span>)<span class='macro_popup'>("Hail")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Hailstorm"</span>)<span class='macro_popup'>("Hailstorm")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Hail showers"</span>)<span class='macro_popup'>("Hail showers")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, },</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> <span class='comment'>/* SMALL_HAIL */</span> {<span class='macro'>N_(<span class='string_literal'>"Small hail"</span>)<span class='macro_popup'>("Small hail")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Small hail"</span>)<span class='macro_popup'>("Small hail")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Small hailstorm"</span>)<span class='macro_popup'>("Small hailstorm")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Showers of small hail"</span>)<span class='macro_popup'>("Showers of small hail")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='comment'>/* PRECIPITATION */</span> {<span class='macro'>N_(<span class='string_literal'>"Unknown precipitation"</span>)<span class='macro_popup'>("Unknown precipitation")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='comment'>/* MIST */</span> {<span class='macro'>N_(<span class='string_literal'>"Mist"</span>)<span class='macro_popup'>("Mist")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Mist"</span>)<span class='macro_popup'>("Mist")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='comment'>/* FOG */</span> {<span class='macro'>N_(<span class='string_literal'>"Fog"</span>)<span class='macro_popup'>("Fog")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Fog in the vicinity"</span>)<span class='macro_popup'>("Fog in the vicinity")</span></span> , <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Fog"</span>)<span class='macro_popup'>("Fog")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Shallow fog"</span>)<span class='macro_popup'>("Shallow fog")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Patches of fog"</span>)<span class='macro_popup'>("Patches of fog")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Partial fog"</span>)<span class='macro_popup'>("Partial fog")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Freezing fog"</span>)<span class='macro_popup'>("Freezing fog")</span></span> },</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> <span class='comment'>/* SMOKE */</span> {<span class='macro'>N_(<span class='string_literal'>"Smoke"</span>)<span class='macro_popup'>("Smoke")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Smoke"</span>)<span class='macro_popup'>("Smoke")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='comment'>/* VOLCANIC_ASH */</span> {<span class='macro'>N_(<span class='string_literal'>"Volcanic ash"</span>)<span class='macro_popup'>("Volcanic ash")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Volcanic ash"</span>)<span class='macro_popup'>("Volcanic ash")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='comment'>/* SAND */</span> {<span class='macro'>N_(<span class='string_literal'>"Sand"</span>)<span class='macro_popup'>("Sand")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Sand"</span>)<span class='macro_popup'>("Sand")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Blowing sand"</span>)<span class='macro_popup'>("Blowing sand")</span></span>, <span class='string_literal'>""</span>, <span class='macro'>N_(<span class='string_literal'>"Drifting sand"</span>)<span class='macro_popup'>("Drifting sand")</span></span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> <span class='comment'>/* HAZE */</span> {<span class='macro'>N_(<span class='string_literal'>"Haze"</span>)<span class='macro_popup'>("Haze")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Haze"</span>)<span class='macro_popup'>("Haze")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='comment'>/* SPRAY */</span> {<span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Blowing sprays"</span>)<span class='macro_popup'>("Blowing sprays")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> <span class='comment'>/* DUST */</span> {<span class='macro'>N_(<span class='string_literal'>"Dust"</span>)<span class='macro_popup'>("Dust")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Dust"</span>)<span class='macro_popup'>("Dust")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Blowing dust"</span>)<span class='macro_popup'>("Blowing dust")</span></span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Drifting dust"</span>)<span class='macro_popup'>("Drifting dust")</span></span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='comment'>/* SQUALL */</span> {<span class='macro'>N_(<span class='string_literal'>"Squall"</span>)<span class='macro_popup'>("Squall")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Squall"</span>)<span class='macro_popup'>("Squall")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='comment'>/* SANDSTORM */</span> {<span class='macro'>N_(<span class='string_literal'>"Sandstorm"</span>)<span class='macro_popup'>("Sandstorm")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Sandstorm in the vicinity"</span>)<span class='macro_popup'>("Sandstorm in the vicinity")</span></span> , <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Sandstorm"</span>)<span class='macro_popup'>("Sandstorm")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Heavy sandstorm"</span>)<span class='macro_popup'>("Heavy sandstorm")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> <span class='comment'>/* DUSTSTORM */</span> {<span class='macro'>N_(<span class='string_literal'>"Duststorm"</span>)<span class='macro_popup'>("Duststorm")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Duststorm in the vicinity"</span>)<span class='macro_popup'>("Duststorm in the vicinity")</span></span> , <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Duststorm"</span>)<span class='macro_popup'>("Duststorm")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Heavy duststorm"</span>)<span class='macro_popup'>("Heavy duststorm")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> <span class='comment'>/* FUNNEL_CLOUD */</span> {<span class='macro'>N_(<span class='string_literal'>"Funnel cloud"</span>)<span class='macro_popup'>("Funnel cloud")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* TORNADO */</span> {<span class='macro'>N_(<span class='string_literal'>"Tornado"</span>)<span class='macro_popup'>("Tornado")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> },</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='comment'>/* DUST_WHIRLS */</span> {<span class='macro'>N_(<span class='string_literal'>"Dust whirls"</span>)<span class='macro_popup'>("Dust whirls")</span></span>, <span class='macro'>N_(<span class='string_literal'>"Dust whirls in the vicinity"</span>)<span class='macro_popup'>("Dust whirls in the vicinity")</span></span> , <span class='string_literal'>"??"</span>, <span class='macro'>N_(<span class='string_literal'>"Dust whirls"</span>)<span class='macro_popup'>("Dust whirls")</span></span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span>, <span class='string_literal'>"??"</span> }</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line">weather_conditions_string (WeatherConditions cond)</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> <span class='keyword'>const</span> gchar *str;</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> <span class='keyword'>if</span> (!cond.significant) {</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> <span class='keyword'>if</span> (cond.phenomenon &gt; PHENOMENON_INVALID &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> cond.phenomenon &lt; PHENOMENON_LAST &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> cond.qualifier &gt; QUALIFIER_INVALID &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> cond.qualifier &lt; QUALIFIER_LAST)</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> str = <span class='macro'>_(conditions_str[(<span class='keyword'>int</span>)cond.phenomenon][(<span class='keyword'>int</span>)cond.qualifier])<span class='macro_popup'>(mateweather_gettext (conditions_str[(int)cond.phenomenon][(int<br>)cond.qualifier]))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> str = <span class='macro'>_(<span class='string_literal'>"Invalid"</span>)<span class='macro_popup'>(mateweather_gettext ("Invalid"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> <span class='keyword'>return</span> (strlen (str) &gt; 0) ? str : <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"><span class='comment'>/* Locals turned global to facilitate asynchronous HTTP requests */</span></td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line">requests_init (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> <span class='keyword'>if</span> (info-&gt;requests_pending)</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"><span class='keyword'>void</span> request_done (WeatherInfo *info, gboolean ok)</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='keyword'>if</span> (ok) {</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (<span class='keyword'>void</span>) calc_sun (info);</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> info-&gt;moonValid = info-&gt;valid &amp;&amp; calc_moon (info);</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> <span class='keyword'>if</span> (!--info-&gt;requests_pending)</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> info-&gt;finish_cb (info, info-&gt;cb_data);</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"><span class='comment'>/* it's OK to pass in NULL */</span></td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line">free_forecast_list (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> GSList *p;</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='keyword'>if</span> (!info)</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='keyword'>for</span> (p = info-&gt;forecast_list; p; p = p-&gt;next)</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> weather_info_free (p-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> <span class='keyword'>if</span> (info-&gt;forecast_list) {</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> g_slist_free (info-&gt;forecast_list);</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> info-&gt;forecast_list = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"><span class='comment'>/* Relative humidity computation - thanks to &lt;[email protected]&gt; */</span></td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>inline</span> gdouble</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line">calc_humidity (gdouble temp, gdouble dewp)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> gdouble esat, esurf;</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> <span class='keyword'>if</span> (temp &gt; -500.0 &amp;&amp; dewp &gt; -500.0) {</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> temp = <span class='macro'>TEMP_F_TO_C (temp)<span class='macro_popup'>(((temp) - 32.0) * (5.0/9.0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> dewp = <span class='macro'>TEMP_F_TO_C (dewp)<span class='macro_popup'>(((dewp) - 32.0) * (5.0/9.0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> esat = 6.11 * pow (10.0, (7.5 * temp) / (237.7 + temp));</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> esurf = 6.11 * pow (10.0, (7.5 * dewp) / (237.7 + dewp));</td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> esurf = -1.0;</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> esat = 1.0;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> <span class='keyword'>return</span> ((esurf/esat) * 100.0);</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>inline</span> gdouble</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line">calc_apparent (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> gdouble temp = info-&gt;temp;</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> gdouble wind = <span class='macro'>WINDSPEED_KNOTS_TO_MPH (info-&gt;windspeed)<span class='macro_popup'>((info-&gt;windspeed) * 1.150779)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> gdouble apparent = -1000.;</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> <span class='comment'>* Wind chill calculations as of 01-Nov-2001</span></td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> <span class='comment'>* http://www.nws.noaa.gov/om/windchill/index.shtml</span></td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> <span class='comment'>* Some pages suggest that the formula will soon be adjusted</span></td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>* to account for solar radiation (bright sun vs cloudy sky)</span></td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='keyword'>if</span> (temp &lt;= 50.0) {</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> <span class='keyword'>if</span> (wind &gt; 3.0) {</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> gdouble v = pow (wind, 0.16);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> apparent = 35.74 + 0.6215 * temp - 35.75 * v + 0.4275 * temp * v;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (wind &gt;= 0.) {</td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> apparent = temp;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> <span class='comment'>* Heat index calculations:</span></td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> <span class='comment'>* http://www.srh.noaa.gov/fwd/heatindex/heat5.html</span></td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (temp &gt;= 80.0) {</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> <span class='keyword'>if</span> (info-&gt;temp &gt;= -500. &amp;&amp; info-&gt;dew &gt;= -500.) {</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> gdouble humidity = calc_humidity (info-&gt;temp, info-&gt;dew);</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> gdouble t2 = temp * temp;</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> gdouble h2 = humidity * humidity;</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"><span class='directive'>#if 1</span></td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='comment'>* A really precise formula. Note that overall precision is</span></td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> <span class='comment'>* constrained by the accuracy of the instruments and that the</span></td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> <span class='comment'>* we receive the temperature and dewpoints as integers.</span></td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> gdouble t3 = t2 * temp;</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> gdouble h3 = h2 * temp;</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> apparent = 16.923</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> + 0.185212 * temp</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> + 5.37941 * humidity</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> - 0.100254 * temp * humidity</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> + 9.41695e-3 * t2</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> + 7.28898e-3 * h2</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> + 3.45372e-4 * t2 * humidity</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> - 8.14971e-4 * temp * h2</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> + 1.02102e-5 * t2 * h2</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> - 3.8646e-5 * t3</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> + 2.91583e-5 * h3</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> + 1.42721e-6 * t3 * humidity</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> + 1.97483e-7 * temp * h3</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> - 2.18429e-8 * t3 * h2</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> + 8.43296e-10 * t2 * h3</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> - 4.81975e-11 * t3 * h3;</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"><span class='directive'>#else</span></td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='comment'>* An often cited alternative: values are within 5 degrees for</span></td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='comment'>* most ranges between 10% and 70% humidity and to 110 degrees.</span></td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> apparent = - 42.379</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> + 2.04901523 * temp</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> + 10.14333127 * humidity</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> - 0.22475541 * temp * humidity</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> - 6.83783e-3 * t2</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> - 5.481717e-2 * h2</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> + 1.22874e-3 * t2 * humidity</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> + 8.5282e-4 * temp * h2</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> - 1.99e-6 * t2 * h2;</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> apparent = temp;</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='keyword'>return</span> apparent;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line">WeatherInfo *</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line">_weather_info_fill (WeatherInfo *info,</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> WeatherLocation *location,</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>const</span> WeatherPrefs *prefs,</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> WeatherInfoFunc cb,</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='macro'>g_return_val_if_fail (((info == NULL) &amp;&amp; (location != NULL)) || \<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (((info == ((void*)0)) &amp;&amp; (location != ((void*)0<br>))) || ((info != ((void*)0)) &amp;&amp; (location == ((void*)<br>0)))) _g_boolean_var_ = 1; else _g_boolean_var_ = 0; _g_boolean_var_<br>; }), 1))) { } else { g_return_if_fail_warning ("MateWeather"<br>, ((const char*) (__func__)), "((info == NULL) &amp;&amp; (location != NULL)) || ((info != NULL) &amp;&amp; (location == NULL))"<br>); return (((void*)0)); } } while (0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='macro'>((info != NULL) &amp;&amp; (location == NULL)), NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (((info == ((void*)0)) &amp;&amp; (location != ((void*)0<br>))) || ((info != ((void*)0)) &amp;&amp; (location == ((void*)<br>0)))) _g_boolean_var_ = 1; else _g_boolean_var_ = 0; _g_boolean_var_<br>; }), 1))) { } else { g_return_if_fail_warning ("MateWeather"<br>, ((const char*) (__func__)), "((info == NULL) &amp;&amp; (location != NULL)) || ((info != NULL) &amp;&amp; (location == NULL))"<br>); return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> <span class='macro'>g_return_val_if_fail (prefs != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (prefs != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "prefs != NULL")<br>; return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> <span class='comment'>/* FIXME: i'm not sure this works as intended anymore */</span></td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>if</span> (!info) {</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> info = <span class='macro'>g_new0 (WeatherInfo, 1)<span class='macro_popup'>(WeatherInfo *) (__extension__ ({ gsize __n = (gsize) (1); gsize<br> __s = sizeof (WeatherInfo); gpointer __p; if (__s == 1) __p =<br> g_malloc0 (__n); else if (__builtin_constant_p (__n) &amp;&amp;<br> (__s == 0 || __n &lt;= (9223372036854775807L *2UL+1UL) / __s<br>)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s<br>); __p; }))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> info-&gt;requests_pending = 0;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> info-&gt;location = weather_location_clone (location);</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> location = info-&gt;location;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> <span class='keyword'>if</span> (info-&gt;forecast)</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> g_free (info-&gt;forecast);</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> info-&gt;forecast = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> free_forecast_list (info);</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> <span class='keyword'>if</span> (info-&gt;radar != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> g_object_unref (info-&gt;radar);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> info-&gt;radar = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='comment'>/* Update in progress */</span></td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>if</span> (!requests_init (info)) {</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> <span class='comment'>/* Defaults (just in case...) */</span></td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> <span class='comment'>/* Well, no just in case anymore. We may actually fail to fetch some</span></td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> <span class='comment'>* fields. */</span></td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> info-&gt;forecast_type = prefs-&gt;type;</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> info-&gt;temperature_unit = prefs-&gt;temperature_unit;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> info-&gt;speed_unit = prefs-&gt;speed_unit;</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> info-&gt;pressure_unit = prefs-&gt;pressure_unit;</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> info-&gt;distance_unit = prefs-&gt;distance_unit;</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> info-&gt;update = 0;</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> info-&gt;sky = -1;</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> info-&gt;cond.significant = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_NONE;</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_NONE;</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> info-&gt;temp = -1000.0;</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> info-&gt;tempMinMaxValid = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> info-&gt;temp_min = -1000.0;</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> info-&gt;temp_max = -1000.0;</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> info-&gt;dew = -1000.0;</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> info-&gt;wind = -1;</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> info-&gt;windspeed = -1;</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> info-&gt;pressure = -1.0;</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> info-&gt;visibility = -1.0;</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> info-&gt;sunriseValid = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> info-&gt;sunsetValid = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> info-&gt;moonValid = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> info-&gt;sunrise = 0;</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> info-&gt;sunset = 0;</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> info-&gt;moonphase = 0;</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> info-&gt;moonlatitude = 0;</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> info-&gt;forecast = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> info-&gt;forecast_list = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> info-&gt;radar = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> info-&gt;radar_url = prefs-&gt;radar &amp;&amp; prefs-&gt;radar_custom_url ?</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> g_strdup (prefs-&gt;radar_custom_url) : <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> info-&gt;finish_cb = cb;</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> info-&gt;cb_data = data;</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;session) {</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> info-&gt;session = soup_session_async_new ();</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> soup_session_add_feature_by_type (info-&gt;session, <span class='macro'>SOUP_TYPE_PROXY_RESOLVER_DEFAULT<span class='macro_popup'>(soup_proxy_resolver_default_get_type ())</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> metar_start_open (info);</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> iwin_start_open (info);</td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>if</span> (prefs-&gt;radar) {</td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> wx_start_open (info);</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='keyword'>return</span> info;</td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line">weather_info_abort (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> <span class='macro'>g_return_if_fail (info != NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return; } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>if</span> (info-&gt;session) {</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> soup_session_abort (info-&gt;session);</td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> info-&gt;requests_pending = 0;</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line">WeatherInfo *</td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line">weather_info_clone (<span class='keyword'>const</span> WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> WeatherInfo *clone;</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> clone = <span class='macro'>g_new (WeatherInfo, 1)<span class='macro_popup'>(WeatherInfo *) (__extension__ ({ gsize __n = (gsize) (1); gsize<br> __s = sizeof (WeatherInfo); gpointer __p; if (__s == 1) __p =<br> g_malloc (__n); else if (__builtin_constant_p (__n) &amp;&amp;<br> (__s == 0 || __n &lt;= (9223372036854775807L *2UL+1UL) / __s<br>)) __p = g_malloc (__n * __s); else __p = g_malloc_n (__n, __s<br>); __p; }))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> <span class='comment'>/* move everything */</span></td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> memmove (clone, info, <span class='keyword'>sizeof</span> (WeatherInfo));</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='comment'>/* special moves */</span></td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> clone-&gt;location = weather_location_clone (info-&gt;location);</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* This handles null correctly */</span></td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> clone-&gt;forecast = g_strdup (info-&gt;forecast);</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> clone-&gt;radar_url = g_strdup (info-&gt;radar_url);</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> <span class='keyword'>if</span> (info-&gt;forecast_list) {</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> GSList *p;</td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> clone-&gt;forecast_list = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>for</span> (p = info-&gt;forecast_list; p; p = p-&gt;next) {</td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> clone-&gt;forecast_list = g_slist_prepend (clone-&gt;forecast_list, weather_info_clone (p-&gt;data));</td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> clone-&gt;forecast_list = g_slist_reverse (clone-&gt;forecast_list);</td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> clone-&gt;radar = info-&gt;radar;</td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> <span class='keyword'>if</span> (clone-&gt;radar != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> g_object_ref (clone-&gt;radar);</td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>return</span> clone;</td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line">weather_info_free (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> <span class='keyword'>if</span> (!info)</td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> weather_info_abort (info);</td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> <span class='keyword'>if</span> (info-&gt;session)</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> g_object_unref (info-&gt;session);</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> weather_location_free (info-&gt;location);</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> info-&gt;location = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_free (info-&gt;forecast);</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> info-&gt;forecast = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> free_forecast_list (info);</td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> <span class='keyword'>if</span> (info-&gt;radar != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> g_object_unref (info-&gt;radar);</td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> info-&gt;radar = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> g_free (info);</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line">weather_info_is_valid (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='keyword'>return</span> info-&gt;valid;</td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line">weather_info_network_error (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> <span class='keyword'>return</span> info-&gt;network_error;</td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line">weather_info_to_metric (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='macro'>g_return_if_fail (info != NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return; } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> info-&gt;temperature_unit = TEMP_UNIT_CENTIGRADE;</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> info-&gt;speed_unit = SPEED_UNIT_MS;</td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> info-&gt;pressure_unit = PRESSURE_UNIT_HPA;</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> info-&gt;distance_unit = DISTANCE_UNIT_METERS;</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line">weather_info_to_imperial (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> <span class='macro'>g_return_if_fail (info != NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return; } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> info-&gt;temperature_unit = TEMP_UNIT_FAHRENHEIT;</td></tr>
+<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> info-&gt;speed_unit = SPEED_UNIT_MPH;</td></tr>
+<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> info-&gt;pressure_unit = PRESSURE_UNIT_INCH_HG;</td></tr>
+<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> info-&gt;distance_unit = DISTANCE_UNIT_MILES;</td></tr>
+<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"><span class='keyword'>const</span> WeatherLocation *</td></tr>
+<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line">weather_info_get_location (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>return</span> info-&gt;location;</td></tr>
+<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line">weather_info_get_location_name (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_return_val_if_fail (info-&gt;location != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info-&gt;location != ((void*)0)) _g_boolean_var_ = 1; else<br> _g_boolean_var_ = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info-&gt;location != NULL"<br>); return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>return</span> info-&gt;location-&gt;name;</td></tr>
+<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line">weather_info_get_update (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='keyword'>static</span> gchar buf[200];</td></tr>
+<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='keyword'>char</span> *utf8, *timeformat;</td></tr>
+<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='keyword'>if</span> (info-&gt;update != 0) {</td></tr>
+<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='keyword'>struct</span> tm tm;</td></tr>
+<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> localtime_r (&amp;info-&gt;update, &amp;tm);</td></tr>
+<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> <span class='comment'>/* Translators: this is a format string for strftime</span></td></tr>
+<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> <span class='comment'>* see `man 3 strftime` for more details</span></td></tr>
+<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> timeformat = g_locale_from_utf8 (<span class='macro'>_(<span class='string_literal'>"%a, %b %d / %H:%M"</span>)<span class='macro_popup'>(mateweather_gettext ("%a, %b %d / %H:%M"))</span></span>, -1,</td></tr>
+<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> <span class='keyword'>if</span> (!timeformat) {</td></tr>
+<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> strcpy (buf, <span class='string_literal'>"???"</span>);</td></tr>
+<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strftime (buf, <span class='keyword'>sizeof</span> (buf), timeformat, &amp;tm) &lt;= 0) {</td></tr>
+<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> strcpy (buf, <span class='string_literal'>"???"</span>);</td></tr>
+<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> g_free (timeformat);</td></tr>
+<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> <span class='comment'>/* Convert to UTF-8 */</span></td></tr>
+<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"> utf8 = g_locale_to_utf8 (buf, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> <span class="mrange">strcpy</span> (buf, utf8);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:9ex; max-width:52em">Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</div></td></tr>
+<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> g_free (utf8);</td></tr>
+<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line"> strncpy (buf, <span class='macro'>_(<span class='string_literal'>"Unknown observation time"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown observation time"))</span></span>, <span class='keyword'>sizeof</span> (buf));</td></tr>
+<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> buf[<span class='keyword'>sizeof</span> (buf)-1] = '\0';</td></tr>
+<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line">weather_info_get_sky (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> <span class='keyword'>if</span> (info-&gt;sky &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"> <span class='keyword'>return</span> weather_sky_string (info-&gt;sky);</td></tr>
+<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line">weather_info_get_conditions (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line"> <span class='keyword'>return</span> weather_conditions_string (info-&gt;cond);</td></tr>
+<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line">temperature_string (gdouble temp, TempUnit to_unit, gboolean want_round)</td></tr>
+<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line"> <span class='keyword'>static</span> gchar buf[100];</td></tr>
+<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> <span class='keyword'>switch</span> (to_unit) {</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_FAHRENHEIT:</td></tr>
+<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> <span class='keyword'>if</span> (!want_round) {</td></tr>
+<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> <span class='comment'>/* Translators: This is the temperature in degrees Fahrenheit (\302\260 is U+00B0 DEGREE SIGN) */</span></td></tr>
+<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.1f \302\260F"</span>)<span class='macro_popup'>(mateweather_gettext ("%.1f \302\260F"))</span></span>, temp);</td></tr>
+<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>int</span> range_problem = <span class='macro'>FE_INVALID<span class='macro_popup'>0x01</span></span> | <span class='macro'>FE_DIVBYZERO<span class='macro_popup'>0x04</span></span> | <span class='macro'>FE_OVERFLOW<span class='macro_popup'>0x08</span></span> | <span class='macro'>FE_UNDERFLOW<span class='macro_popup'>0x10</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> gdouble temp_r;</td></tr>
+<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line"> feclearexcept(range_problem);</td></tr>
+<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> temp_r = round (temp);</td></tr>
+<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> <span class='keyword'>if</span> (fetestexcept(range_problem))</td></tr>
+<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"n/a"</span>)<span class='macro_popup'>(mateweather_gettext ("n/a"))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> <span class='comment'>/* Translators: This is the temperature in degrees Fahrenheit (\302\260 is U+00B0 DEGREE SIGN) */</span></td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%d \302\260F"</span>)<span class='macro_popup'>(mateweather_gettext ("%d \302\260F"))</span></span>, (<span class='keyword'>int</span>)temp_r);</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_CENTIGRADE:</td></tr>
+<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line"> <span class='keyword'>if</span> (!want_round) {</td></tr>
+<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> <span class='comment'>/* Translators: This is the temperature in degrees Celsius (\302\260 is U+00B0 DEGREE SIGN) */</span></td></tr>
+<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.1f \302\260C"</span>)<span class='macro_popup'>(mateweather_gettext ("%.1f \302\260C"))</span></span>, <span class='macro'>TEMP_F_TO_C (temp)<span class='macro_popup'>(((temp) - 32.0) * (5.0/9.0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>int</span> range_problem = <span class='macro'>FE_INVALID<span class='macro_popup'>0x01</span></span> | <span class='macro'>FE_DIVBYZERO<span class='macro_popup'>0x04</span></span> | <span class='macro'>FE_OVERFLOW<span class='macro_popup'>0x08</span></span> | <span class='macro'>FE_UNDERFLOW<span class='macro_popup'>0x10</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gdouble temp_r;</td></tr>
+<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> feclearexcept(range_problem);</td></tr>
+<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> temp_r = round (<span class='macro'>TEMP_F_TO_C (temp)<span class='macro_popup'>(((temp) - 32.0) * (5.0/9.0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> <span class='keyword'>if</span> (fetestexcept(range_problem))</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"n/a"</span>)<span class='macro_popup'>(mateweather_gettext ("n/a"))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='comment'>/* Translators: This is the temperature in degrees Celsius (\302\260 is U+00B0 DEGREE SIGN) */</span></td></tr>
+<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%d \302\260C"</span>)<span class='macro_popup'>(mateweather_gettext ("%d \302\260C"))</span></span>, (<span class='keyword'>int</span>)temp_r);</td></tr>
+<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_KELVIN:</td></tr>
+<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> <span class='keyword'>if</span> (!want_round) {</td></tr>
+<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> <span class='comment'>/* Translators: This is the temperature in kelvin */</span></td></tr>
+<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.1f K"</span>)<span class='macro_popup'>(mateweather_gettext ("%.1f K"))</span></span>, <span class='macro'>TEMP_F_TO_K (temp)<span class='macro_popup'>((temp + 459.67) * (5.0/9.0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>int</span> range_problem = <span class='macro'>FE_INVALID<span class='macro_popup'>0x01</span></span> | <span class='macro'>FE_DIVBYZERO<span class='macro_popup'>0x04</span></span> | <span class='macro'>FE_OVERFLOW<span class='macro_popup'>0x08</span></span> | <span class='macro'>FE_UNDERFLOW<span class='macro_popup'>0x10</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> gdouble temp_r;</td></tr>
+<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> feclearexcept(range_problem);</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> temp_r = round (<span class='macro'>TEMP_F_TO_K (temp)<span class='macro_popup'>((temp + 459.67) * (5.0/9.0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> <span class='keyword'>if</span> (fetestexcept(range_problem))</td></tr>
+<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"n/a"</span>)<span class='macro_popup'>(mateweather_gettext ("n/a"))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> <span class='comment'>/* Translators: This is the temperature in kelvin */</span></td></tr>
+<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%d K"</span>)<span class='macro_popup'>(mateweather_gettext ("%d K"))</span></span>, (<span class='keyword'>int</span>)temp_r);</td></tr>
+<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_DEFAULT:</td></tr>
+<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> g_warning (<span class='string_literal'>"Conversion to illegal temperature unit: %d"</span>, to_unit);</td></tr>
+<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line">weather_info_get_temp (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> <span class='keyword'>if</span> (info-&gt;temp &lt; -500.0)</td></tr>
+<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"> <span class='keyword'>return</span> temperature_string (info-&gt;temp, info-&gt;temperature_unit, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line">weather_info_get_temp_min (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid || !info-&gt;tempMinMaxValid)</td></tr>
+<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='keyword'>if</span> (info-&gt;temp_min &lt; -500.0)</td></tr>
+<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> <span class='keyword'>return</span> temperature_string (info-&gt;temp_min, info-&gt;temperature_unit, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line">weather_info_get_temp_max (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid || !info-&gt;tempMinMaxValid)</td></tr>
+<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> <span class='keyword'>if</span> (info-&gt;temp_max &lt; -500.0)</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>return</span> temperature_string (info-&gt;temp_max, info-&gt;temperature_unit, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line">weather_info_get_dew (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> <span class='keyword'>if</span> (info-&gt;dew &lt; -500.0)</td></tr>
+<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> <span class='keyword'>return</span> temperature_string (info-&gt;dew, info-&gt;temperature_unit, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="874"><td class="num" id="LN874">874</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="875"><td class="num" id="LN875">875</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="876"><td class="num" id="LN876">876</td><td class="line">weather_info_get_humidity (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="877"><td class="num" id="LN877">877</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="878"><td class="num" id="LN878">878</td><td class="line"> <span class='keyword'>static</span> gchar buf[20];</td></tr>
+<tr class="codeline" data-linenumber="879"><td class="num" id="LN879">879</td><td class="line"> gdouble humidity;</td></tr>
+<tr class="codeline" data-linenumber="880"><td class="num" id="LN880">880</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="881"><td class="num" id="LN881">881</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="882"><td class="num" id="LN882">882</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="883"><td class="num" id="LN883">883</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="884"><td class="num" id="LN884">884</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="885"><td class="num" id="LN885">885</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="886"><td class="num" id="LN886">886</td><td class="line"> humidity = calc_humidity (info-&gt;temp, info-&gt;dew);</td></tr>
+<tr class="codeline" data-linenumber="887"><td class="num" id="LN887">887</td><td class="line"> <span class='keyword'>if</span> (humidity &lt; 0.0)</td></tr>
+<tr class="codeline" data-linenumber="888"><td class="num" id="LN888">888</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="889"><td class="num" id="LN889">889</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="890"><td class="num" id="LN890">890</td><td class="line"> <span class='comment'>/* Translators: This is the humidity in percent */</span></td></tr>
+<tr class="codeline" data-linenumber="891"><td class="num" id="LN891">891</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.f%%"</span>)<span class='macro_popup'>(mateweather_gettext ("%.f%%"))</span></span>, humidity);</td></tr>
+<tr class="codeline" data-linenumber="892"><td class="num" id="LN892">892</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="893"><td class="num" id="LN893">893</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="894"><td class="num" id="LN894">894</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="895"><td class="num" id="LN895">895</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="896"><td class="num" id="LN896">896</td><td class="line">weather_info_get_apparent (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="897"><td class="num" id="LN897">897</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="898"><td class="num" id="LN898">898</td><td class="line"> gdouble apparent;</td></tr>
+<tr class="codeline" data-linenumber="899"><td class="num" id="LN899">899</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="900"><td class="num" id="LN900">900</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="901"><td class="num" id="LN901">901</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="902"><td class="num" id="LN902">902</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="903"><td class="num" id="LN903">903</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="904"><td class="num" id="LN904">904</td><td class="line"> apparent = calc_apparent (info);</td></tr>
+<tr class="codeline" data-linenumber="905"><td class="num" id="LN905">905</td><td class="line"> <span class='keyword'>if</span> (apparent &lt; -500.0)</td></tr>
+<tr class="codeline" data-linenumber="906"><td class="num" id="LN906">906</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="907"><td class="num" id="LN907">907</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="908"><td class="num" id="LN908">908</td><td class="line"> <span class='keyword'>return</span> temperature_string (apparent, info-&gt;temperature_unit, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="909"><td class="num" id="LN909">909</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="910"><td class="num" id="LN910">910</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="911"><td class="num" id="LN911">911</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="912"><td class="num" id="LN912">912</td><td class="line">windspeed_string (gfloat knots, SpeedUnit to_unit)</td></tr>
+<tr class="codeline" data-linenumber="913"><td class="num" id="LN913">913</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="914"><td class="num" id="LN914">914</td><td class="line"> <span class='keyword'>static</span> gchar buf[100];</td></tr>
+<tr class="codeline" data-linenumber="915"><td class="num" id="LN915">915</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="916"><td class="num" id="LN916">916</td><td class="line"> <span class='keyword'>switch</span> (to_unit) {</td></tr>
+<tr class="codeline" data-linenumber="917"><td class="num" id="LN917">917</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_KNOTS:</td></tr>
+<tr class="codeline" data-linenumber="918"><td class="num" id="LN918">918</td><td class="line"> <span class='comment'>/* Translators: This is the wind speed in knots */</span></td></tr>
+<tr class="codeline" data-linenumber="919"><td class="num" id="LN919">919</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%0.1f knots"</span>)<span class='macro_popup'>(mateweather_gettext ("%0.1f knots"))</span></span>, knots);</td></tr>
+<tr class="codeline" data-linenumber="920"><td class="num" id="LN920">920</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="921"><td class="num" id="LN921">921</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_MPH:</td></tr>
+<tr class="codeline" data-linenumber="922"><td class="num" id="LN922">922</td><td class="line"> <span class='comment'>/* Translators: This is the wind speed in miles per hour */</span></td></tr>
+<tr class="codeline" data-linenumber="923"><td class="num" id="LN923">923</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.1f mph"</span>)<span class='macro_popup'>(mateweather_gettext ("%.1f mph"))</span></span>, <span class='macro'>WINDSPEED_KNOTS_TO_MPH (knots)<span class='macro_popup'>((knots) * 1.150779)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="924"><td class="num" id="LN924">924</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="925"><td class="num" id="LN925">925</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_KPH:</td></tr>
+<tr class="codeline" data-linenumber="926"><td class="num" id="LN926">926</td><td class="line"> <span class='comment'>/* Translators: This is the wind speed in kilometers per hour */</span></td></tr>
+<tr class="codeline" data-linenumber="927"><td class="num" id="LN927">927</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.1f km/h"</span>)<span class='macro_popup'>(mateweather_gettext ("%.1f km/h"))</span></span>, <span class='macro'>WINDSPEED_KNOTS_TO_KPH (knots)<span class='macro_popup'>((knots) * 1.851965)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="928"><td class="num" id="LN928">928</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="929"><td class="num" id="LN929">929</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_MS:</td></tr>
+<tr class="codeline" data-linenumber="930"><td class="num" id="LN930">930</td><td class="line"> <span class='comment'>/* Translators: This is the wind speed in meters per second */</span></td></tr>
+<tr class="codeline" data-linenumber="931"><td class="num" id="LN931">931</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.1f m/s"</span>)<span class='macro_popup'>(mateweather_gettext ("%.1f m/s"))</span></span>, <span class='macro'>WINDSPEED_KNOTS_TO_MS (knots)<span class='macro_popup'>((knots) * 0.514444)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="932"><td class="num" id="LN932">932</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="933"><td class="num" id="LN933">933</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_BFT:</td></tr>
+<tr class="codeline" data-linenumber="934"><td class="num" id="LN934">934</td><td class="line"> <span class='comment'>/* Translators: This is the wind speed as a Beaufort force factor</span></td></tr>
+<tr class="codeline" data-linenumber="935"><td class="num" id="LN935">935</td><td class="line"> <span class='comment'>* (commonly used in nautical wind estimation).</span></td></tr>
+<tr class="codeline" data-linenumber="936"><td class="num" id="LN936">936</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="937"><td class="num" id="LN937">937</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"Beaufort force %.1f"</span>)<span class='macro_popup'>(mateweather_gettext ("Beaufort force %.1f"))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="938"><td class="num" id="LN938">938</td><td class="line"> <span class='macro'>WINDSPEED_KNOTS_TO_BFT (knots)<span class='macro_popup'>(pow ((knots) * 0.615363, 0.666666))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="939"><td class="num" id="LN939">939</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="940"><td class="num" id="LN940">940</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="941"><td class="num" id="LN941">941</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_DEFAULT:</td></tr>
+<tr class="codeline" data-linenumber="942"><td class="num" id="LN942">942</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="943"><td class="num" id="LN943">943</td><td class="line"> g_warning (<span class='string_literal'>"Conversion to illegal speed unit: %d"</span>, to_unit);</td></tr>
+<tr class="codeline" data-linenumber="944"><td class="num" id="LN944">944</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="945"><td class="num" id="LN945">945</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="946"><td class="num" id="LN946">946</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="947"><td class="num" id="LN947">947</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="948"><td class="num" id="LN948">948</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="949"><td class="num" id="LN949">949</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="950"><td class="num" id="LN950">950</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="951"><td class="num" id="LN951">951</td><td class="line">weather_info_get_wind (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="952"><td class="num" id="LN952">952</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="953"><td class="num" id="LN953">953</td><td class="line"> <span class='keyword'>static</span> gchar buf[200];</td></tr>
+<tr class="codeline" data-linenumber="954"><td class="num" id="LN954">954</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="955"><td class="num" id="LN955">955</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="956"><td class="num" id="LN956">956</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="957"><td class="num" id="LN957">957</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="958"><td class="num" id="LN958">958</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="959"><td class="num" id="LN959">959</td><td class="line"> <span class='keyword'>if</span> (info-&gt;windspeed &lt; 0.0 || info-&gt;wind &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="960"><td class="num" id="LN960">960</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="961"><td class="num" id="LN961">961</td><td class="line"> <span class='keyword'>if</span> (info-&gt;windspeed == 0.00) {</td></tr>
+<tr class="codeline" data-linenumber="962"><td class="num" id="LN962">962</td><td class="line"> strncpy (buf, <span class='macro'>_(<span class='string_literal'>"Calm"</span>)<span class='macro_popup'>(mateweather_gettext ("Calm"))</span></span>, <span class='keyword'>sizeof</span> (buf));</td></tr>
+<tr class="codeline" data-linenumber="963"><td class="num" id="LN963">963</td><td class="line"> buf[<span class='keyword'>sizeof</span> (buf)-1] = '\0';</td></tr>
+<tr class="codeline" data-linenumber="964"><td class="num" id="LN964">964</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="965"><td class="num" id="LN965">965</td><td class="line"> <span class='comment'>/* Translators: This is 'wind direction' / 'wind speed' */</span></td></tr>
+<tr class="codeline" data-linenumber="966"><td class="num" id="LN966">966</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%s / %s"</span>)<span class='macro_popup'>(mateweather_gettext ("%s / %s"))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="967"><td class="num" id="LN967">967</td><td class="line"> weather_wind_direction_string (info-&gt;wind),</td></tr>
+<tr class="codeline" data-linenumber="968"><td class="num" id="LN968">968</td><td class="line"> windspeed_string (info-&gt;windspeed, info-&gt;speed_unit));</td></tr>
+<tr class="codeline" data-linenumber="969"><td class="num" id="LN969">969</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="970"><td class="num" id="LN970">970</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="971"><td class="num" id="LN971">971</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="972"><td class="num" id="LN972">972</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="973"><td class="num" id="LN973">973</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="974"><td class="num" id="LN974">974</td><td class="line">weather_info_get_pressure (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="975"><td class="num" id="LN975">975</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="976"><td class="num" id="LN976">976</td><td class="line"> <span class='keyword'>static</span> gchar buf[100];</td></tr>
+<tr class="codeline" data-linenumber="977"><td class="num" id="LN977">977</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="978"><td class="num" id="LN978">978</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="979"><td class="num" id="LN979">979</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="980"><td class="num" id="LN980">980</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="981"><td class="num" id="LN981">981</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="982"><td class="num" id="LN982">982</td><td class="line"> <span class='keyword'>if</span> (info-&gt;pressure &lt; 0.0)</td></tr>
+<tr class="codeline" data-linenumber="983"><td class="num" id="LN983">983</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="984"><td class="num" id="LN984">984</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="985"><td class="num" id="LN985">985</td><td class="line"> <span class='keyword'>switch</span> (info-&gt;pressure_unit) {</td></tr>
+<tr class="codeline" data-linenumber="986"><td class="num" id="LN986">986</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_INCH_HG:</td></tr>
+<tr class="codeline" data-linenumber="987"><td class="num" id="LN987">987</td><td class="line"> <span class='comment'>/* Translators: This is pressure in inches of mercury */</span></td></tr>
+<tr class="codeline" data-linenumber="988"><td class="num" id="LN988">988</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.2f inHg"</span>)<span class='macro_popup'>(mateweather_gettext ("%.2f inHg"))</span></span>, info-&gt;pressure);</td></tr>
+<tr class="codeline" data-linenumber="989"><td class="num" id="LN989">989</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="990"><td class="num" id="LN990">990</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_MM_HG:</td></tr>
+<tr class="codeline" data-linenumber="991"><td class="num" id="LN991">991</td><td class="line"> <span class='comment'>/* Translators: This is pressure in millimeters of mercury */</span></td></tr>
+<tr class="codeline" data-linenumber="992"><td class="num" id="LN992">992</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.1f mmHg"</span>)<span class='macro_popup'>(mateweather_gettext ("%.1f mmHg"))</span></span>, <span class='macro'>PRESSURE_INCH_TO_MM (info-&gt;pressure)<span class='macro_popup'>((info-&gt;pressure) * 25.40005)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="993"><td class="num" id="LN993">993</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="994"><td class="num" id="LN994">994</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_KPA:</td></tr>
+<tr class="codeline" data-linenumber="995"><td class="num" id="LN995">995</td><td class="line"> <span class='comment'>/* Translators: This is pressure in kiloPascals */</span></td></tr>
+<tr class="codeline" data-linenumber="996"><td class="num" id="LN996">996</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.2f kPa"</span>)<span class='macro_popup'>(mateweather_gettext ("%.2f kPa"))</span></span>, <span class='macro'>PRESSURE_INCH_TO_KPA (info-&gt;pressure)<span class='macro_popup'>((info-&gt;pressure) * 3.386)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="997"><td class="num" id="LN997">997</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="998"><td class="num" id="LN998">998</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_HPA:</td></tr>
+<tr class="codeline" data-linenumber="999"><td class="num" id="LN999">999</td><td class="line"> <span class='comment'>/* Translators: This is pressure in hectoPascals */</span></td></tr>
+<tr class="codeline" data-linenumber="1000"><td class="num" id="LN1000">1000</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.2f hPa"</span>)<span class='macro_popup'>(mateweather_gettext ("%.2f hPa"))</span></span>, <span class='macro'>PRESSURE_INCH_TO_HPA (info-&gt;pressure)<span class='macro_popup'>((info-&gt;pressure) * 33.86)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1001"><td class="num" id="LN1001">1001</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1002"><td class="num" id="LN1002">1002</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_MB:</td></tr>
+<tr class="codeline" data-linenumber="1003"><td class="num" id="LN1003">1003</td><td class="line"> <span class='comment'>/* Translators: This is pressure in millibars */</span></td></tr>
+<tr class="codeline" data-linenumber="1004"><td class="num" id="LN1004">1004</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.2f mb"</span>)<span class='macro_popup'>(mateweather_gettext ("%.2f mb"))</span></span>, <span class='macro'>PRESSURE_INCH_TO_MB (info-&gt;pressure)<span class='macro_popup'>(((info-&gt;pressure) * 33.86))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1005"><td class="num" id="LN1005">1005</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1006"><td class="num" id="LN1006">1006</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_ATM:</td></tr>
+<tr class="codeline" data-linenumber="1007"><td class="num" id="LN1007">1007</td><td class="line"> <span class='comment'>/* Translators: This is pressure in atmospheres */</span></td></tr>
+<tr class="codeline" data-linenumber="1008"><td class="num" id="LN1008">1008</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.3f atm"</span>)<span class='macro_popup'>(mateweather_gettext ("%.3f atm"))</span></span>, <span class='macro'>PRESSURE_INCH_TO_ATM (info-&gt;pressure)<span class='macro_popup'>((info-&gt;pressure) * 0.033421052)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1009"><td class="num" id="LN1009">1009</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1010"><td class="num" id="LN1010">1010</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1011"><td class="num" id="LN1011">1011</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="1012"><td class="num" id="LN1012">1012</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_DEFAULT:</td></tr>
+<tr class="codeline" data-linenumber="1013"><td class="num" id="LN1013">1013</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1014"><td class="num" id="LN1014">1014</td><td class="line"> g_warning (<span class='string_literal'>"Conversion to illegal pressure unit: %d"</span>, info-&gt;pressure_unit);</td></tr>
+<tr class="codeline" data-linenumber="1015"><td class="num" id="LN1015">1015</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1016"><td class="num" id="LN1016">1016</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1017"><td class="num" id="LN1017">1017</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1018"><td class="num" id="LN1018">1018</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="1019"><td class="num" id="LN1019">1019</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1020"><td class="num" id="LN1020">1020</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1021"><td class="num" id="LN1021">1021</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="1022"><td class="num" id="LN1022">1022</td><td class="line">weather_info_get_visibility (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="1023"><td class="num" id="LN1023">1023</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1024"><td class="num" id="LN1024">1024</td><td class="line"> <span class='keyword'>static</span> gchar buf[100];</td></tr>
+<tr class="codeline" data-linenumber="1025"><td class="num" id="LN1025">1025</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1026"><td class="num" id="LN1026">1026</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1027"><td class="num" id="LN1027">1027</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1028"><td class="num" id="LN1028">1028</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1029"><td class="num" id="LN1029">1029</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1030"><td class="num" id="LN1030">1030</td><td class="line"> <span class='keyword'>if</span> (info-&gt;visibility &lt; 0.0)</td></tr>
+<tr class="codeline" data-linenumber="1031"><td class="num" id="LN1031">1031</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1032"><td class="num" id="LN1032">1032</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1033"><td class="num" id="LN1033">1033</td><td class="line"> <span class='keyword'>switch</span> (info-&gt;distance_unit) {</td></tr>
+<tr class="codeline" data-linenumber="1034"><td class="num" id="LN1034">1034</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_MILES:</td></tr>
+<tr class="codeline" data-linenumber="1035"><td class="num" id="LN1035">1035</td><td class="line"> <span class='comment'>/* Translators: This is the visibility in miles */</span></td></tr>
+<tr class="codeline" data-linenumber="1036"><td class="num" id="LN1036">1036</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.1f miles"</span>)<span class='macro_popup'>(mateweather_gettext ("%.1f miles"))</span></span>, info-&gt;visibility);</td></tr>
+<tr class="codeline" data-linenumber="1037"><td class="num" id="LN1037">1037</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1038"><td class="num" id="LN1038">1038</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_KM:</td></tr>
+<tr class="codeline" data-linenumber="1039"><td class="num" id="LN1039">1039</td><td class="line"> <span class='comment'>/* Translators: This is the visibility in kilometers */</span></td></tr>
+<tr class="codeline" data-linenumber="1040"><td class="num" id="LN1040">1040</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.1f km"</span>)<span class='macro_popup'>(mateweather_gettext ("%.1f km"))</span></span>, <span class='macro'>VISIBILITY_SM_TO_KM (info-&gt;visibility)<span class='macro_popup'>((info-&gt;visibility) * 1.609344)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1041"><td class="num" id="LN1041">1041</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1042"><td class="num" id="LN1042">1042</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_METERS:</td></tr>
+<tr class="codeline" data-linenumber="1043"><td class="num" id="LN1043">1043</td><td class="line"> <span class='comment'>/* Translators: This is the visibility in meters */</span></td></tr>
+<tr class="codeline" data-linenumber="1044"><td class="num" id="LN1044">1044</td><td class="line"> g_snprintf (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%.0fm"</span>)<span class='macro_popup'>(mateweather_gettext ("%.0fm"))</span></span>, <span class='macro'>VISIBILITY_SM_TO_M (info-&gt;visibility)<span class='macro_popup'>(((info-&gt;visibility) * 1.609344) * 1000)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1045"><td class="num" id="LN1045">1045</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1046"><td class="num" id="LN1046">1046</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1047"><td class="num" id="LN1047">1047</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="1048"><td class="num" id="LN1048">1048</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_DEFAULT:</td></tr>
+<tr class="codeline" data-linenumber="1049"><td class="num" id="LN1049">1049</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1050"><td class="num" id="LN1050">1050</td><td class="line"> g_warning (<span class='string_literal'>"Conversion to illegal visibility unit: %d"</span>, info-&gt;pressure_unit);</td></tr>
+<tr class="codeline" data-linenumber="1051"><td class="num" id="LN1051">1051</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>_(<span class='string_literal'>"Unknown"</span>)<span class='macro_popup'>(mateweather_gettext ("Unknown"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1052"><td class="num" id="LN1052">1052</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1053"><td class="num" id="LN1053">1053</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1054"><td class="num" id="LN1054">1054</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="1055"><td class="num" id="LN1055">1055</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1056"><td class="num" id="LN1056">1056</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1057"><td class="num" id="LN1057">1057</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="1058"><td class="num" id="LN1058">1058</td><td class="line">weather_info_get_sunrise (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="1059"><td class="num" id="LN1059">1059</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1060"><td class="num" id="LN1060">1060</td><td class="line"> <span class='keyword'>static</span> gchar buf[200];</td></tr>
+<tr class="codeline" data-linenumber="1061"><td class="num" id="LN1061">1061</td><td class="line"> <span class='keyword'>struct</span> tm tm;</td></tr>
+<tr class="codeline" data-linenumber="1062"><td class="num" id="LN1062">1062</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1063"><td class="num" id="LN1063">1063</td><td class="line"> <span class='macro'>g_return_val_if_fail (info &amp;&amp; info-&gt;location, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info &amp;&amp; info-&gt;location) _g_boolean_var_ = 1;<br> else _g_boolean_var_ = 0; _g_boolean_var_; }), 1))) { } else<br> { g_return_if_fail_warning ("MateWeather", ((const char*) (__func__<br>)), "info &amp;&amp; info-&gt;location"); return (((void*)0))<br>; } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1064"><td class="num" id="LN1064">1064</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1065"><td class="num" id="LN1065">1065</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;location-&gt;latlon_valid)</td></tr>
+<tr class="codeline" data-linenumber="1066"><td class="num" id="LN1066">1066</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1067"><td class="num" id="LN1067">1067</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1068"><td class="num" id="LN1068">1068</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1069"><td class="num" id="LN1069">1069</td><td class="line"> <span class='keyword'>if</span> (!calc_sun (info))</td></tr>
+<tr class="codeline" data-linenumber="1070"><td class="num" id="LN1070">1070</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1071"><td class="num" id="LN1071">1071</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1072"><td class="num" id="LN1072">1072</td><td class="line"> localtime_r (&amp;info-&gt;sunrise, &amp;tm);</td></tr>
+<tr class="codeline" data-linenumber="1073"><td class="num" id="LN1073">1073</td><td class="line"> <span class='keyword'>if</span> (strftime (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%H:%M"</span>)<span class='macro_popup'>(mateweather_gettext ("%H:%M"))</span></span>, &amp;tm) &lt;= 0)</td></tr>
+<tr class="codeline" data-linenumber="1074"><td class="num" id="LN1074">1074</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1075"><td class="num" id="LN1075">1075</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="1076"><td class="num" id="LN1076">1076</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1077"><td class="num" id="LN1077">1077</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1078"><td class="num" id="LN1078">1078</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="1079"><td class="num" id="LN1079">1079</td><td class="line">weather_info_get_sunset (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="1080"><td class="num" id="LN1080">1080</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1081"><td class="num" id="LN1081">1081</td><td class="line"> <span class='keyword'>static</span> gchar buf[200];</td></tr>
+<tr class="codeline" data-linenumber="1082"><td class="num" id="LN1082">1082</td><td class="line"> <span class='keyword'>struct</span> tm tm;</td></tr>
+<tr class="codeline" data-linenumber="1083"><td class="num" id="LN1083">1083</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1084"><td class="num" id="LN1084">1084</td><td class="line"> <span class='macro'>g_return_val_if_fail (info &amp;&amp; info-&gt;location, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info &amp;&amp; info-&gt;location) _g_boolean_var_ = 1;<br> else _g_boolean_var_ = 0; _g_boolean_var_; }), 1))) { } else<br> { g_return_if_fail_warning ("MateWeather", ((const char*) (__func__<br>)), "info &amp;&amp; info-&gt;location"); return (((void*)0))<br>; } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1085"><td class="num" id="LN1085">1085</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1086"><td class="num" id="LN1086">1086</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;location-&gt;latlon_valid)</td></tr>
+<tr class="codeline" data-linenumber="1087"><td class="num" id="LN1087">1087</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1088"><td class="num" id="LN1088">1088</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1089"><td class="num" id="LN1089">1089</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1090"><td class="num" id="LN1090">1090</td><td class="line"> <span class='keyword'>if</span> (!calc_sun (info))</td></tr>
+<tr class="codeline" data-linenumber="1091"><td class="num" id="LN1091">1091</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1092"><td class="num" id="LN1092">1092</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1093"><td class="num" id="LN1093">1093</td><td class="line"> localtime_r (&amp;info-&gt;sunset, &amp;tm);</td></tr>
+<tr class="codeline" data-linenumber="1094"><td class="num" id="LN1094">1094</td><td class="line"> <span class='keyword'>if</span> (strftime (buf, <span class='keyword'>sizeof</span> (buf), <span class='macro'>_(<span class='string_literal'>"%H:%M"</span>)<span class='macro_popup'>(mateweather_gettext ("%H:%M"))</span></span>, &amp;tm) &lt;= 0)</td></tr>
+<tr class="codeline" data-linenumber="1095"><td class="num" id="LN1095">1095</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"-"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1096"><td class="num" id="LN1096">1096</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="1097"><td class="num" id="LN1097">1097</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1098"><td class="num" id="LN1098">1098</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1099"><td class="num" id="LN1099">1099</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="1100"><td class="num" id="LN1100">1100</td><td class="line">weather_info_get_forecast (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="1101"><td class="num" id="LN1101">1101</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1102"><td class="num" id="LN1102">1102</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1103"><td class="num" id="LN1103">1103</td><td class="line"> <span class='keyword'>return</span> info-&gt;forecast;</td></tr>
+<tr class="codeline" data-linenumber="1104"><td class="num" id="LN1104">1104</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1105"><td class="num" id="LN1105">1105</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1106"><td class="num" id="LN1106">1106</td><td class="line"><span class='comment'>/**</span></td></tr>
+<tr class="codeline" data-linenumber="1107"><td class="num" id="LN1107">1107</td><td class="line"> <span class='comment'>* weather_info_get_forecast_list:</span></td></tr>
+<tr class="codeline" data-linenumber="1108"><td class="num" id="LN1108">1108</td><td class="line"> <span class='comment'>* Returns list of WeatherInfo* objects for the forecast.</span></td></tr>
+<tr class="codeline" data-linenumber="1109"><td class="num" id="LN1109">1109</td><td class="line"> <span class='comment'>* The list is owned by the 'info' object thus is alive as long</span></td></tr>
+<tr class="codeline" data-linenumber="1110"><td class="num" id="LN1110">1110</td><td class="line"> <span class='comment'>* as the 'info'. This list is filled only when requested with</span></td></tr>
+<tr class="codeline" data-linenumber="1111"><td class="num" id="LN1111">1111</td><td class="line"> <span class='comment'>* type FORECAST_LIST and if available for given location.</span></td></tr>
+<tr class="codeline" data-linenumber="1112"><td class="num" id="LN1112">1112</td><td class="line"> <span class='comment'>* The 'update' property is the date/time when the forecast info</span></td></tr>
+<tr class="codeline" data-linenumber="1113"><td class="num" id="LN1113">1113</td><td class="line"> <span class='comment'>* is used for.</span></td></tr>
+<tr class="codeline" data-linenumber="1114"><td class="num" id="LN1114">1114</td><td class="line"> <span class='comment'>**/</span></td></tr>
+<tr class="codeline" data-linenumber="1115"><td class="num" id="LN1115">1115</td><td class="line">GSList *</td></tr>
+<tr class="codeline" data-linenumber="1116"><td class="num" id="LN1116">1116</td><td class="line">weather_info_get_forecast_list (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="1117"><td class="num" id="LN1117">1117</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1118"><td class="num" id="LN1118">1118</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1119"><td class="num" id="LN1119">1119</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1120"><td class="num" id="LN1120">1120</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1121"><td class="num" id="LN1121">1121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1122"><td class="num" id="LN1122">1122</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1123"><td class="num" id="LN1123">1123</td><td class="line"> <span class='keyword'>return</span> info-&gt;forecast_list;</td></tr>
+<tr class="codeline" data-linenumber="1124"><td class="num" id="LN1124">1124</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1125"><td class="num" id="LN1125">1125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1126"><td class="num" id="LN1126">1126</td><td class="line">GdkPixbufAnimation *</td></tr>
+<tr class="codeline" data-linenumber="1127"><td class="num" id="LN1127">1127</td><td class="line">weather_info_get_radar (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="1128"><td class="num" id="LN1128">1128</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1129"><td class="num" id="LN1129">1129</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1130"><td class="num" id="LN1130">1130</td><td class="line"> <span class='keyword'>return</span> info-&gt;radar;</td></tr>
+<tr class="codeline" data-linenumber="1131"><td class="num" id="LN1131">1131</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1132"><td class="num" id="LN1132">1132</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1133"><td class="num" id="LN1133">1133</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="1134"><td class="num" id="LN1134">1134</td><td class="line">weather_info_get_temp_summary (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="1135"><td class="num" id="LN1135">1135</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1136"><td class="num" id="LN1136">1136</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1137"><td class="num" id="LN1137">1137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1138"><td class="num" id="LN1138">1138</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid || info-&gt;temp &lt; -500.0)</td></tr>
+<tr class="codeline" data-linenumber="1139"><td class="num" id="LN1139">1139</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"--"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1140"><td class="num" id="LN1140">1140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1141"><td class="num" id="LN1141">1141</td><td class="line"> <span class='keyword'>return</span> temperature_string (info-&gt;temp, info-&gt;temperature_unit, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1142"><td class="num" id="LN1142">1142</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1143"><td class="num" id="LN1143">1143</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1144"><td class="num" id="LN1144">1144</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1145"><td class="num" id="LN1145">1145</td><td class="line">gchar *</td></tr>
+<tr class="codeline" data-linenumber="1146"><td class="num" id="LN1146">1146</td><td class="line">weather_info_get_weather_summary (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="1147"><td class="num" id="LN1147">1147</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1148"><td class="num" id="LN1148">1148</td><td class="line"> <span class='keyword'>const</span> gchar *buf;</td></tr>
+<tr class="codeline" data-linenumber="1149"><td class="num" id="LN1149">1149</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1150"><td class="num" id="LN1150">1150</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1151"><td class="num" id="LN1151">1151</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1152"><td class="num" id="LN1152">1152</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1153"><td class="num" id="LN1153">1153</td><td class="line"> <span class='keyword'>return</span> g_strdup (<span class='macro'>_(<span class='string_literal'>"Retrieval failed"</span>)<span class='macro_popup'>(mateweather_gettext ("Retrieval failed"))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1154"><td class="num" id="LN1154">1154</td><td class="line"> buf = weather_info_get_conditions (info);</td></tr>
+<tr class="codeline" data-linenumber="1155"><td class="num" id="LN1155">1155</td><td class="line"> <span class='keyword'>if</span> (!strcmp (buf, <span class='string_literal'>"-"</span>))</td></tr>
+<tr class="codeline" data-linenumber="1156"><td class="num" id="LN1156">1156</td><td class="line"> buf = weather_info_get_sky (info);</td></tr>
+<tr class="codeline" data-linenumber="1157"><td class="num" id="LN1157">1157</td><td class="line"> <span class='keyword'>return</span> g_strdup_printf (<span class='string_literal'>"%s: %s"</span>, weather_info_get_location_name (info), buf);</td></tr>
+<tr class="codeline" data-linenumber="1158"><td class="num" id="LN1158">1158</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1159"><td class="num" id="LN1159">1159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1160"><td class="num" id="LN1160">1160</td><td class="line"><span class='keyword'>const</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="1161"><td class="num" id="LN1161">1161</td><td class="line">weather_info_get_icon_name (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="1162"><td class="num" id="LN1162">1162</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1163"><td class="num" id="LN1163">1163</td><td class="line"> WeatherConditions cond;</td></tr>
+<tr class="codeline" data-linenumber="1164"><td class="num" id="LN1164">1164</td><td class="line"> WeatherSky sky;</td></tr>
+<tr class="codeline" data-linenumber="1165"><td class="num" id="LN1165">1165</td><td class="line"> time_t current_time;</td></tr>
+<tr class="codeline" data-linenumber="1166"><td class="num" id="LN1166">1166</td><td class="line"> gboolean daytime;</td></tr>
+<tr class="codeline" data-linenumber="1167"><td class="num" id="LN1167">1167</td><td class="line"> gchar* icon;</td></tr>
+<tr class="codeline" data-linenumber="1168"><td class="num" id="LN1168">1168</td><td class="line"> <span class='keyword'>static</span> gchar icon_buffer[32];</td></tr>
+<tr class="codeline" data-linenumber="1169"><td class="num" id="LN1169">1169</td><td class="line"> WeatherMoonPhase moonPhase;</td></tr>
+<tr class="codeline" data-linenumber="1170"><td class="num" id="LN1170">1170</td><td class="line"> WeatherMoonLatitude moonLat;</td></tr>
+<tr class="codeline" data-linenumber="1171"><td class="num" id="LN1171">1171</td><td class="line"> gint phase;</td></tr>
+<tr class="codeline" data-linenumber="1172"><td class="num" id="LN1172">1172</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1173"><td class="num" id="LN1173">1173</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (((void*)0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1174"><td class="num" id="LN1174">1174</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1175"><td class="num" id="LN1175">1175</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1176"><td class="num" id="LN1176">1176</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1177"><td class="num" id="LN1177">1177</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1178"><td class="num" id="LN1178">1178</td><td class="line"> cond = info-&gt;cond;</td></tr>
+<tr class="codeline" data-linenumber="1179"><td class="num" id="LN1179">1179</td><td class="line"> sky = info-&gt;sky;</td></tr>
+<tr class="codeline" data-linenumber="1180"><td class="num" id="LN1180">1180</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1181"><td class="num" id="LN1181">1181</td><td class="line"> <span class='keyword'>if</span> (cond.significant) {</td></tr>
+<tr class="codeline" data-linenumber="1182"><td class="num" id="LN1182">1182</td><td class="line"> <span class='keyword'>if</span> (cond.phenomenon != PHENOMENON_NONE &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="1183"><td class="num" id="LN1183">1183</td><td class="line"> cond.qualifier == QUALIFIER_THUNDERSTORM)</td></tr>
+<tr class="codeline" data-linenumber="1184"><td class="num" id="LN1184">1184</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"weather-storm"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1185"><td class="num" id="LN1185">1185</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1186"><td class="num" id="LN1186">1186</td><td class="line"> <span class='keyword'>switch</span> (cond.phenomenon) {</td></tr>
+<tr class="codeline" data-linenumber="1187"><td class="num" id="LN1187">1187</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="1188"><td class="num" id="LN1188">1188</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_LAST:</td></tr>
+<tr class="codeline" data-linenumber="1189"><td class="num" id="LN1189">1189</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_NONE:</td></tr>
+<tr class="codeline" data-linenumber="1190"><td class="num" id="LN1190">1190</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1191"><td class="num" id="LN1191">1191</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1192"><td class="num" id="LN1192">1192</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_DRIZZLE:</td></tr>
+<tr class="codeline" data-linenumber="1193"><td class="num" id="LN1193">1193</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_RAIN:</td></tr>
+<tr class="codeline" data-linenumber="1194"><td class="num" id="LN1194">1194</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_UNKNOWN_PRECIPITATION:</td></tr>
+<tr class="codeline" data-linenumber="1195"><td class="num" id="LN1195">1195</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_HAIL:</td></tr>
+<tr class="codeline" data-linenumber="1196"><td class="num" id="LN1196">1196</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_SMALL_HAIL:</td></tr>
+<tr class="codeline" data-linenumber="1197"><td class="num" id="LN1197">1197</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"weather-showers"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1198"><td class="num" id="LN1198">1198</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1199"><td class="num" id="LN1199">1199</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_SNOW:</td></tr>
+<tr class="codeline" data-linenumber="1200"><td class="num" id="LN1200">1200</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_SNOW_GRAINS:</td></tr>
+<tr class="codeline" data-linenumber="1201"><td class="num" id="LN1201">1201</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_ICE_PELLETS:</td></tr>
+<tr class="codeline" data-linenumber="1202"><td class="num" id="LN1202">1202</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_ICE_CRYSTALS:</td></tr>
+<tr class="codeline" data-linenumber="1203"><td class="num" id="LN1203">1203</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"weather-snow"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1204"><td class="num" id="LN1204">1204</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1205"><td class="num" id="LN1205">1205</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_TORNADO:</td></tr>
+<tr class="codeline" data-linenumber="1206"><td class="num" id="LN1206">1206</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_SQUALL:</td></tr>
+<tr class="codeline" data-linenumber="1207"><td class="num" id="LN1207">1207</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"weather-storm"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1208"><td class="num" id="LN1208">1208</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1209"><td class="num" id="LN1209">1209</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_MIST:</td></tr>
+<tr class="codeline" data-linenumber="1210"><td class="num" id="LN1210">1210</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_FOG:</td></tr>
+<tr class="codeline" data-linenumber="1211"><td class="num" id="LN1211">1211</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_SMOKE:</td></tr>
+<tr class="codeline" data-linenumber="1212"><td class="num" id="LN1212">1212</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_VOLCANIC_ASH:</td></tr>
+<tr class="codeline" data-linenumber="1213"><td class="num" id="LN1213">1213</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_SAND:</td></tr>
+<tr class="codeline" data-linenumber="1214"><td class="num" id="LN1214">1214</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_HAZE:</td></tr>
+<tr class="codeline" data-linenumber="1215"><td class="num" id="LN1215">1215</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_SPRAY:</td></tr>
+<tr class="codeline" data-linenumber="1216"><td class="num" id="LN1216">1216</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_DUST:</td></tr>
+<tr class="codeline" data-linenumber="1217"><td class="num" id="LN1217">1217</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_SANDSTORM:</td></tr>
+<tr class="codeline" data-linenumber="1218"><td class="num" id="LN1218">1218</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_DUSTSTORM:</td></tr>
+<tr class="codeline" data-linenumber="1219"><td class="num" id="LN1219">1219</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_FUNNEL_CLOUD:</td></tr>
+<tr class="codeline" data-linenumber="1220"><td class="num" id="LN1220">1220</td><td class="line"> <span class='keyword'>case</span> PHENOMENON_DUST_WHIRLS:</td></tr>
+<tr class="codeline" data-linenumber="1221"><td class="num" id="LN1221">1221</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"weather-fog"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1222"><td class="num" id="LN1222">1222</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1223"><td class="num" id="LN1223">1223</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1224"><td class="num" id="LN1224">1224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1225"><td class="num" id="LN1225">1225</td><td class="line"> <span class='keyword'>if</span> (info-&gt;midnightSun ||</td></tr>
+<tr class="codeline" data-linenumber="1226"><td class="num" id="LN1226">1226</td><td class="line"> (!info-&gt;sunriseValid &amp;&amp; !info-&gt;sunsetValid))</td></tr>
+<tr class="codeline" data-linenumber="1227"><td class="num" id="LN1227">1227</td><td class="line"> daytime = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1228"><td class="num" id="LN1228">1228</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (info-&gt;polarNight)</td></tr>
+<tr class="codeline" data-linenumber="1229"><td class="num" id="LN1229">1229</td><td class="line"> daytime = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1230"><td class="num" id="LN1230">1230</td><td class="line"> <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="1231"><td class="num" id="LN1231">1231</td><td class="line"> current_time = time (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1232"><td class="num" id="LN1232">1232</td><td class="line"> daytime =</td></tr>
+<tr class="codeline" data-linenumber="1233"><td class="num" id="LN1233">1233</td><td class="line"> ( !info-&gt;sunriseValid || (current_time &gt;= info-&gt;sunrise) ) &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="1234"><td class="num" id="LN1234">1234</td><td class="line"> ( !info-&gt;sunsetValid || (current_time &lt; info-&gt;sunset) );</td></tr>
+<tr class="codeline" data-linenumber="1235"><td class="num" id="LN1235">1235</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1236"><td class="num" id="LN1236">1236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1237"><td class="num" id="LN1237">1237</td><td class="line"> <span class='keyword'>switch</span> (sky) {</td></tr>
+<tr class="codeline" data-linenumber="1238"><td class="num" id="LN1238">1238</td><td class="line"> <span class='keyword'>case</span> SKY_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="1239"><td class="num" id="LN1239">1239</td><td class="line"> <span class='keyword'>case</span> SKY_LAST:</td></tr>
+<tr class="codeline" data-linenumber="1240"><td class="num" id="LN1240">1240</td><td class="line"> <span class='keyword'>case</span> SKY_CLEAR:</td></tr>
+<tr class="codeline" data-linenumber="1241"><td class="num" id="LN1241">1241</td><td class="line"> <span class='keyword'>if</span> (daytime)</td></tr>
+<tr class="codeline" data-linenumber="1242"><td class="num" id="LN1242">1242</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"weather-clear"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1243"><td class="num" id="LN1243">1243</td><td class="line"> <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="1244"><td class="num" id="LN1244">1244</td><td class="line"> icon = g_stpcpy(icon_buffer, <span class='string_literal'>"weather-clear-night"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1245"><td class="num" id="LN1245">1245</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1246"><td class="num" id="LN1246">1246</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1247"><td class="num" id="LN1247">1247</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1248"><td class="num" id="LN1248">1248</td><td class="line"> <span class='keyword'>case</span> SKY_BROKEN:</td></tr>
+<tr class="codeline" data-linenumber="1249"><td class="num" id="LN1249">1249</td><td class="line"> <span class='keyword'>case</span> SKY_SCATTERED:</td></tr>
+<tr class="codeline" data-linenumber="1250"><td class="num" id="LN1250">1250</td><td class="line"> <span class='keyword'>case</span> SKY_FEW:</td></tr>
+<tr class="codeline" data-linenumber="1251"><td class="num" id="LN1251">1251</td><td class="line"> <span class='keyword'>if</span> (daytime)</td></tr>
+<tr class="codeline" data-linenumber="1252"><td class="num" id="LN1252">1252</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"weather-few-clouds"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1253"><td class="num" id="LN1253">1253</td><td class="line"> <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="1254"><td class="num" id="LN1254">1254</td><td class="line"> icon = g_stpcpy(icon_buffer, <span class='string_literal'>"weather-few-clouds-night"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1255"><td class="num" id="LN1255">1255</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1256"><td class="num" id="LN1256">1256</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1257"><td class="num" id="LN1257">1257</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1258"><td class="num" id="LN1258">1258</td><td class="line"> <span class='keyword'>case</span> SKY_OVERCAST:</td></tr>
+<tr class="codeline" data-linenumber="1259"><td class="num" id="LN1259">1259</td><td class="line"> <span class='keyword'>return</span> <span class='string_literal'>"weather-overcast"</span>;</td></tr>
+<tr class="codeline" data-linenumber="1260"><td class="num" id="LN1260">1260</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1261"><td class="num" id="LN1261">1261</td><td class="line"> <span class='keyword'>default</span>: <span class='comment'>/* unrecognized */</span></td></tr>
+<tr class="codeline" data-linenumber="1262"><td class="num" id="LN1262">1262</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1263"><td class="num" id="LN1263">1263</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1264"><td class="num" id="LN1264">1264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1265"><td class="num" id="LN1265">1265</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="1266"><td class="num" id="LN1266">1266</td><td class="line"> <span class='comment'>* A phase-of-moon icon is to be returned.</span></td></tr>
+<tr class="codeline" data-linenumber="1267"><td class="num" id="LN1267">1267</td><td class="line"> <span class='comment'>* Determine which one based on the moon's location</span></td></tr>
+<tr class="codeline" data-linenumber="1268"><td class="num" id="LN1268">1268</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="1269"><td class="num" id="LN1269">1269</td><td class="line"> <span class='keyword'>if</span> (info-&gt;moonValid &amp;&amp; weather_info_get_value_moonphase(info, &amp;moonPhase, &amp;moonLat)) {</td></tr>
+<tr class="codeline" data-linenumber="1270"><td class="num" id="LN1270">1270</td><td class="line"> phase = (gint)((moonPhase * <span class='macro'>MOON_PHASES<span class='macro_popup'>36</span></span> / 360.) + 0.5);</td></tr>
+<tr class="codeline" data-linenumber="1271"><td class="num" id="LN1271">1271</td><td class="line"> <span class='keyword'>if</span> (phase == <span class='macro'>MOON_PHASES<span class='macro_popup'>36</span></span>) {</td></tr>
+<tr class="codeline" data-linenumber="1272"><td class="num" id="LN1272">1272</td><td class="line"> phase = 0;</td></tr>
+<tr class="codeline" data-linenumber="1273"><td class="num" id="LN1273">1273</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (phase &gt; 0 &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="1274"><td class="num" id="LN1274">1274</td><td class="line"> (<span class='macro'>RADIANS_TO_DEGREES(weather_info_get_location(info)-&gt;latitude)<span class='macro_popup'>((weather_info_get_location(info)-&gt;latitude) * 180. / 3.14159265358979323846<br>)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1275"><td class="num" id="LN1275">1275</td><td class="line"> &lt; moonLat)) {</td></tr>
+<tr class="codeline" data-linenumber="1276"><td class="num" id="LN1276">1276</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="1277"><td class="num" id="LN1277">1277</td><td class="line"> <span class='comment'>* Locations south of the moon's latitude will see the moon in the</span></td></tr>
+<tr class="codeline" data-linenumber="1278"><td class="num" id="LN1278">1278</td><td class="line"> <span class='comment'>* northern sky. The moon waxes and wanes from left to right</span></td></tr>
+<tr class="codeline" data-linenumber="1279"><td class="num" id="LN1279">1279</td><td class="line"> <span class='comment'>* so we reference an icon running in the opposite direction.</span></td></tr>
+<tr class="codeline" data-linenumber="1280"><td class="num" id="LN1280">1280</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="1281"><td class="num" id="LN1281">1281</td><td class="line"> phase = <span class='macro'>MOON_PHASES<span class='macro_popup'>36</span></span> - phase;</td></tr>
+<tr class="codeline" data-linenumber="1282"><td class="num" id="LN1282">1282</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1283"><td class="num" id="LN1283">1283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1284"><td class="num" id="LN1284">1284</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="1285"><td class="num" id="LN1285">1285</td><td class="line"> <span class='comment'>* If the moon is not full then append the angle to the icon string.</span></td></tr>
+<tr class="codeline" data-linenumber="1286"><td class="num" id="LN1286">1286</td><td class="line"> <span class='comment'>* Note that an icon by this name is not required to exist:</span></td></tr>
+<tr class="codeline" data-linenumber="1287"><td class="num" id="LN1287">1287</td><td class="line"> <span class='comment'>* the caller can use GTK_ICON_LOOKUP_GENERIC_FALLBACK to fall back to</span></td></tr>
+<tr class="codeline" data-linenumber="1288"><td class="num" id="LN1288">1288</td><td class="line"> <span class='comment'>* the full moon image.</span></td></tr>
+<tr class="codeline" data-linenumber="1289"><td class="num" id="LN1289">1289</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="1290"><td class="num" id="LN1290">1290</td><td class="line"> <span class='keyword'>if</span> ((0 == (<span class='macro'>MOON_PHASES<span class='macro_popup'>36</span></span> &amp; 0x1)) &amp;&amp; (<span class='macro'>MOON_PHASES<span class='macro_popup'>36</span></span>/2 != phase)) {</td></tr>
+<tr class="codeline" data-linenumber="1291"><td class="num" id="LN1291">1291</td><td class="line"> g_snprintf(icon, <span class='keyword'>sizeof</span>(icon_buffer) - strlen(icon_buffer),</td></tr>
+<tr class="codeline" data-linenumber="1292"><td class="num" id="LN1292">1292</td><td class="line"> <span class='string_literal'>"-%03d"</span>, phase * 360 / <span class='macro'>MOON_PHASES<span class='macro_popup'>36</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1293"><td class="num" id="LN1293">1293</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1294"><td class="num" id="LN1294">1294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1295"><td class="num" id="LN1295">1295</td><td class="line"> <span class='keyword'>return</span> icon_buffer;</td></tr>
+<tr class="codeline" data-linenumber="1296"><td class="num" id="LN1296">1296</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1297"><td class="num" id="LN1297">1297</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1298"><td class="num" id="LN1298">1298</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1299"><td class="num" id="LN1299">1299</td><td class="line">temperature_value (gdouble temp_f,</td></tr>
+<tr class="codeline" data-linenumber="1300"><td class="num" id="LN1300">1300</td><td class="line"> TempUnit to_unit,</td></tr>
+<tr class="codeline" data-linenumber="1301"><td class="num" id="LN1301">1301</td><td class="line"> gdouble *value,</td></tr>
+<tr class="codeline" data-linenumber="1302"><td class="num" id="LN1302">1302</td><td class="line"> TempUnit def_unit)</td></tr>
+<tr class="codeline" data-linenumber="1303"><td class="num" id="LN1303">1303</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1304"><td class="num" id="LN1304">1304</td><td class="line"> gboolean ok = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1305"><td class="num" id="LN1305">1305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1306"><td class="num" id="LN1306">1306</td><td class="line"> *value = 0.0;</td></tr>
+<tr class="codeline" data-linenumber="1307"><td class="num" id="LN1307">1307</td><td class="line"> <span class='keyword'>if</span> (temp_f &lt; -500.0)</td></tr>
+<tr class="codeline" data-linenumber="1308"><td class="num" id="LN1308">1308</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1309"><td class="num" id="LN1309">1309</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1310"><td class="num" id="LN1310">1310</td><td class="line"> <span class='keyword'>if</span> (to_unit == TEMP_UNIT_DEFAULT)</td></tr>
+<tr class="codeline" data-linenumber="1311"><td class="num" id="LN1311">1311</td><td class="line"> to_unit = def_unit;</td></tr>
+<tr class="codeline" data-linenumber="1312"><td class="num" id="LN1312">1312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1313"><td class="num" id="LN1313">1313</td><td class="line"> <span class='keyword'>switch</span> (to_unit) {</td></tr>
+<tr class="codeline" data-linenumber="1314"><td class="num" id="LN1314">1314</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_FAHRENHEIT:</td></tr>
+<tr class="codeline" data-linenumber="1315"><td class="num" id="LN1315">1315</td><td class="line"> *value = temp_f;</td></tr>
+<tr class="codeline" data-linenumber="1316"><td class="num" id="LN1316">1316</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1317"><td class="num" id="LN1317">1317</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_CENTIGRADE:</td></tr>
+<tr class="codeline" data-linenumber="1318"><td class="num" id="LN1318">1318</td><td class="line"> *value = <span class='macro'>TEMP_F_TO_C (temp_f)<span class='macro_popup'>(((temp_f) - 32.0) * (5.0/9.0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1319"><td class="num" id="LN1319">1319</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1320"><td class="num" id="LN1320">1320</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_KELVIN:</td></tr>
+<tr class="codeline" data-linenumber="1321"><td class="num" id="LN1321">1321</td><td class="line"> *value = <span class='macro'>TEMP_F_TO_K (temp_f)<span class='macro_popup'>((temp_f + 459.67) * (5.0/9.0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1322"><td class="num" id="LN1322">1322</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1323"><td class="num" id="LN1323">1323</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="1324"><td class="num" id="LN1324">1324</td><td class="line"> <span class='keyword'>case</span> TEMP_UNIT_DEFAULT:</td></tr>
+<tr class="codeline" data-linenumber="1325"><td class="num" id="LN1325">1325</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1326"><td class="num" id="LN1326">1326</td><td class="line"> ok = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1327"><td class="num" id="LN1327">1327</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1328"><td class="num" id="LN1328">1328</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1329"><td class="num" id="LN1329">1329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1330"><td class="num" id="LN1330">1330</td><td class="line"> <span class='keyword'>return</span> ok;</td></tr>
+<tr class="codeline" data-linenumber="1331"><td class="num" id="LN1331">1331</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1332"><td class="num" id="LN1332">1332</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1333"><td class="num" id="LN1333">1333</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1334"><td class="num" id="LN1334">1334</td><td class="line">speed_value (gdouble knots, SpeedUnit to_unit, gdouble *value, SpeedUnit def_unit)</td></tr>
+<tr class="codeline" data-linenumber="1335"><td class="num" id="LN1335">1335</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1336"><td class="num" id="LN1336">1336</td><td class="line"> gboolean ok = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1337"><td class="num" id="LN1337">1337</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1338"><td class="num" id="LN1338">1338</td><td class="line"> *value = -1.0;</td></tr>
+<tr class="codeline" data-linenumber="1339"><td class="num" id="LN1339">1339</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1340"><td class="num" id="LN1340">1340</td><td class="line"> <span class='keyword'>if</span> (knots &lt; 0.0)</td></tr>
+<tr class="codeline" data-linenumber="1341"><td class="num" id="LN1341">1341</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1342"><td class="num" id="LN1342">1342</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1343"><td class="num" id="LN1343">1343</td><td class="line"> <span class='keyword'>if</span> (to_unit == SPEED_UNIT_DEFAULT)</td></tr>
+<tr class="codeline" data-linenumber="1344"><td class="num" id="LN1344">1344</td><td class="line"> to_unit = def_unit;</td></tr>
+<tr class="codeline" data-linenumber="1345"><td class="num" id="LN1345">1345</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1346"><td class="num" id="LN1346">1346</td><td class="line"> <span class='keyword'>switch</span> (to_unit) {</td></tr>
+<tr class="codeline" data-linenumber="1347"><td class="num" id="LN1347">1347</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_KNOTS:</td></tr>
+<tr class="codeline" data-linenumber="1348"><td class="num" id="LN1348">1348</td><td class="line"> *value = knots;</td></tr>
+<tr class="codeline" data-linenumber="1349"><td class="num" id="LN1349">1349</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1350"><td class="num" id="LN1350">1350</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_MPH:</td></tr>
+<tr class="codeline" data-linenumber="1351"><td class="num" id="LN1351">1351</td><td class="line"> *value = <span class='macro'>WINDSPEED_KNOTS_TO_MPH (knots)<span class='macro_popup'>((knots) * 1.150779)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1352"><td class="num" id="LN1352">1352</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1353"><td class="num" id="LN1353">1353</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_KPH:</td></tr>
+<tr class="codeline" data-linenumber="1354"><td class="num" id="LN1354">1354</td><td class="line"> *value = <span class='macro'>WINDSPEED_KNOTS_TO_KPH (knots)<span class='macro_popup'>((knots) * 1.851965)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1355"><td class="num" id="LN1355">1355</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1356"><td class="num" id="LN1356">1356</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_MS:</td></tr>
+<tr class="codeline" data-linenumber="1357"><td class="num" id="LN1357">1357</td><td class="line"> *value = <span class='macro'>WINDSPEED_KNOTS_TO_MS (knots)<span class='macro_popup'>((knots) * 0.514444)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1358"><td class="num" id="LN1358">1358</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1359"><td class="num" id="LN1359">1359</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_BFT:</td></tr>
+<tr class="codeline" data-linenumber="1360"><td class="num" id="LN1360">1360</td><td class="line"> *value = <span class='macro'>WINDSPEED_KNOTS_TO_BFT (knots)<span class='macro_popup'>(pow ((knots) * 0.615363, 0.666666))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1361"><td class="num" id="LN1361">1361</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1362"><td class="num" id="LN1362">1362</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="1363"><td class="num" id="LN1363">1363</td><td class="line"> <span class='keyword'>case</span> SPEED_UNIT_DEFAULT:</td></tr>
+<tr class="codeline" data-linenumber="1364"><td class="num" id="LN1364">1364</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1365"><td class="num" id="LN1365">1365</td><td class="line"> ok = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1366"><td class="num" id="LN1366">1366</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1367"><td class="num" id="LN1367">1367</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1368"><td class="num" id="LN1368">1368</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1369"><td class="num" id="LN1369">1369</td><td class="line"> <span class='keyword'>return</span> ok;</td></tr>
+<tr class="codeline" data-linenumber="1370"><td class="num" id="LN1370">1370</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1371"><td class="num" id="LN1371">1371</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1372"><td class="num" id="LN1372">1372</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1373"><td class="num" id="LN1373">1373</td><td class="line">pressure_value (gdouble inHg, PressureUnit to_unit, gdouble *value, PressureUnit def_unit)</td></tr>
+<tr class="codeline" data-linenumber="1374"><td class="num" id="LN1374">1374</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1375"><td class="num" id="LN1375">1375</td><td class="line"> gboolean ok = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1376"><td class="num" id="LN1376">1376</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1377"><td class="num" id="LN1377">1377</td><td class="line"> *value = -1.0;</td></tr>
+<tr class="codeline" data-linenumber="1378"><td class="num" id="LN1378">1378</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1379"><td class="num" id="LN1379">1379</td><td class="line"> <span class='keyword'>if</span> (inHg &lt; 0.0)</td></tr>
+<tr class="codeline" data-linenumber="1380"><td class="num" id="LN1380">1380</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1381"><td class="num" id="LN1381">1381</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1382"><td class="num" id="LN1382">1382</td><td class="line"> <span class='keyword'>if</span> (to_unit == PRESSURE_UNIT_DEFAULT)</td></tr>
+<tr class="codeline" data-linenumber="1383"><td class="num" id="LN1383">1383</td><td class="line"> to_unit = def_unit;</td></tr>
+<tr class="codeline" data-linenumber="1384"><td class="num" id="LN1384">1384</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1385"><td class="num" id="LN1385">1385</td><td class="line"> <span class='keyword'>switch</span> (to_unit) {</td></tr>
+<tr class="codeline" data-linenumber="1386"><td class="num" id="LN1386">1386</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_INCH_HG:</td></tr>
+<tr class="codeline" data-linenumber="1387"><td class="num" id="LN1387">1387</td><td class="line"> *value = inHg;</td></tr>
+<tr class="codeline" data-linenumber="1388"><td class="num" id="LN1388">1388</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1389"><td class="num" id="LN1389">1389</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_MM_HG:</td></tr>
+<tr class="codeline" data-linenumber="1390"><td class="num" id="LN1390">1390</td><td class="line"> *value = <span class='macro'>PRESSURE_INCH_TO_MM (inHg)<span class='macro_popup'>((inHg) * 25.40005)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1391"><td class="num" id="LN1391">1391</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1392"><td class="num" id="LN1392">1392</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_KPA:</td></tr>
+<tr class="codeline" data-linenumber="1393"><td class="num" id="LN1393">1393</td><td class="line"> *value = <span class='macro'>PRESSURE_INCH_TO_KPA (inHg)<span class='macro_popup'>((inHg) * 3.386)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1394"><td class="num" id="LN1394">1394</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1395"><td class="num" id="LN1395">1395</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_HPA:</td></tr>
+<tr class="codeline" data-linenumber="1396"><td class="num" id="LN1396">1396</td><td class="line"> *value = <span class='macro'>PRESSURE_INCH_TO_HPA (inHg)<span class='macro_popup'>((inHg) * 33.86)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1397"><td class="num" id="LN1397">1397</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1398"><td class="num" id="LN1398">1398</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_MB:</td></tr>
+<tr class="codeline" data-linenumber="1399"><td class="num" id="LN1399">1399</td><td class="line"> *value = <span class='macro'>PRESSURE_INCH_TO_MB (inHg)<span class='macro_popup'>(((inHg) * 33.86))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1400"><td class="num" id="LN1400">1400</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1401"><td class="num" id="LN1401">1401</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_ATM:</td></tr>
+<tr class="codeline" data-linenumber="1402"><td class="num" id="LN1402">1402</td><td class="line"> *value = <span class='macro'>PRESSURE_INCH_TO_ATM (inHg)<span class='macro_popup'>((inHg) * 0.033421052)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1403"><td class="num" id="LN1403">1403</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1404"><td class="num" id="LN1404">1404</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="1405"><td class="num" id="LN1405">1405</td><td class="line"> <span class='keyword'>case</span> PRESSURE_UNIT_DEFAULT:</td></tr>
+<tr class="codeline" data-linenumber="1406"><td class="num" id="LN1406">1406</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1407"><td class="num" id="LN1407">1407</td><td class="line"> ok = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1408"><td class="num" id="LN1408">1408</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1409"><td class="num" id="LN1409">1409</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1410"><td class="num" id="LN1410">1410</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1411"><td class="num" id="LN1411">1411</td><td class="line"> <span class='keyword'>return</span> ok;</td></tr>
+<tr class="codeline" data-linenumber="1412"><td class="num" id="LN1412">1412</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1413"><td class="num" id="LN1413">1413</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1414"><td class="num" id="LN1414">1414</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1415"><td class="num" id="LN1415">1415</td><td class="line">distance_value (gdouble miles, DistanceUnit to_unit, gdouble *value, DistanceUnit def_unit)</td></tr>
+<tr class="codeline" data-linenumber="1416"><td class="num" id="LN1416">1416</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1417"><td class="num" id="LN1417">1417</td><td class="line"> gboolean ok = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1418"><td class="num" id="LN1418">1418</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1419"><td class="num" id="LN1419">1419</td><td class="line"> *value = -1.0;</td></tr>
+<tr class="codeline" data-linenumber="1420"><td class="num" id="LN1420">1420</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1421"><td class="num" id="LN1421">1421</td><td class="line"> <span class='keyword'>if</span> (miles &lt; 0.0)</td></tr>
+<tr class="codeline" data-linenumber="1422"><td class="num" id="LN1422">1422</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1423"><td class="num" id="LN1423">1423</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1424"><td class="num" id="LN1424">1424</td><td class="line"> <span class='keyword'>if</span> (to_unit == DISTANCE_UNIT_DEFAULT)</td></tr>
+<tr class="codeline" data-linenumber="1425"><td class="num" id="LN1425">1425</td><td class="line"> to_unit = def_unit;</td></tr>
+<tr class="codeline" data-linenumber="1426"><td class="num" id="LN1426">1426</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1427"><td class="num" id="LN1427">1427</td><td class="line"> <span class='keyword'>switch</span> (to_unit) {</td></tr>
+<tr class="codeline" data-linenumber="1428"><td class="num" id="LN1428">1428</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_MILES:</td></tr>
+<tr class="codeline" data-linenumber="1429"><td class="num" id="LN1429">1429</td><td class="line"> *value = miles;</td></tr>
+<tr class="codeline" data-linenumber="1430"><td class="num" id="LN1430">1430</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1431"><td class="num" id="LN1431">1431</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_KM:</td></tr>
+<tr class="codeline" data-linenumber="1432"><td class="num" id="LN1432">1432</td><td class="line"> *value = <span class='macro'>VISIBILITY_SM_TO_KM (miles)<span class='macro_popup'>((miles) * 1.609344)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1433"><td class="num" id="LN1433">1433</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1434"><td class="num" id="LN1434">1434</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_METERS:</td></tr>
+<tr class="codeline" data-linenumber="1435"><td class="num" id="LN1435">1435</td><td class="line"> *value = <span class='macro'>VISIBILITY_SM_TO_M (miles)<span class='macro_popup'>(((miles) * 1.609344) * 1000)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1436"><td class="num" id="LN1436">1436</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1437"><td class="num" id="LN1437">1437</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_INVALID:</td></tr>
+<tr class="codeline" data-linenumber="1438"><td class="num" id="LN1438">1438</td><td class="line"> <span class='keyword'>case</span> DISTANCE_UNIT_DEFAULT:</td></tr>
+<tr class="codeline" data-linenumber="1439"><td class="num" id="LN1439">1439</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1440"><td class="num" id="LN1440">1440</td><td class="line"> ok = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1441"><td class="num" id="LN1441">1441</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1442"><td class="num" id="LN1442">1442</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1443"><td class="num" id="LN1443">1443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1444"><td class="num" id="LN1444">1444</td><td class="line"> <span class='keyword'>return</span> ok;</td></tr>
+<tr class="codeline" data-linenumber="1445"><td class="num" id="LN1445">1445</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1446"><td class="num" id="LN1446">1446</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1447"><td class="num" id="LN1447">1447</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1448"><td class="num" id="LN1448">1448</td><td class="line">weather_info_get_value_sky (WeatherInfo *info, WeatherSky *sky)</td></tr>
+<tr class="codeline" data-linenumber="1449"><td class="num" id="LN1449">1449</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1450"><td class="num" id="LN1450">1450</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1451"><td class="num" id="LN1451">1451</td><td class="line"> <span class='macro'>g_return_val_if_fail (sky != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (sky != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "sky != NULL"); return<br> ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1452"><td class="num" id="LN1452">1452</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1453"><td class="num" id="LN1453">1453</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1454"><td class="num" id="LN1454">1454</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1455"><td class="num" id="LN1455">1455</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1456"><td class="num" id="LN1456">1456</td><td class="line"> <span class='keyword'>if</span> (info-&gt;sky &lt;= SKY_INVALID || info-&gt;sky &gt;= SKY_LAST)</td></tr>
+<tr class="codeline" data-linenumber="1457"><td class="num" id="LN1457">1457</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1458"><td class="num" id="LN1458">1458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1459"><td class="num" id="LN1459">1459</td><td class="line"> *sky = info-&gt;sky;</td></tr>
+<tr class="codeline" data-linenumber="1460"><td class="num" id="LN1460">1460</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1461"><td class="num" id="LN1461">1461</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1462"><td class="num" id="LN1462">1462</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1463"><td class="num" id="LN1463">1463</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1464"><td class="num" id="LN1464">1464</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1465"><td class="num" id="LN1465">1465</td><td class="line">weather_info_get_value_conditions (WeatherInfo *info, WeatherConditionPhenomenon *phenomenon, WeatherConditionQualifier *qualifier)</td></tr>
+<tr class="codeline" data-linenumber="1466"><td class="num" id="LN1466">1466</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1467"><td class="num" id="LN1467">1467</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1468"><td class="num" id="LN1468">1468</td><td class="line"> <span class='macro'>g_return_val_if_fail (phenomenon != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (phenomenon != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "phenomenon != NULL"<br>); return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1469"><td class="num" id="LN1469">1469</td><td class="line"> <span class='macro'>g_return_val_if_fail (qualifier != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (qualifier != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "qualifier != NULL"<br>); return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1470"><td class="num" id="LN1470">1470</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1471"><td class="num" id="LN1471">1471</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1472"><td class="num" id="LN1472">1472</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1473"><td class="num" id="LN1473">1473</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1474"><td class="num" id="LN1474">1474</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;cond.significant)</td></tr>
+<tr class="codeline" data-linenumber="1475"><td class="num" id="LN1475">1475</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1476"><td class="num" id="LN1476">1476</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1477"><td class="num" id="LN1477">1477</td><td class="line"> <span class='keyword'>if</span> (!(info-&gt;cond.phenomenon &gt; PHENOMENON_INVALID &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="1478"><td class="num" id="LN1478">1478</td><td class="line"> info-&gt;cond.phenomenon &lt; PHENOMENON_LAST &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="1479"><td class="num" id="LN1479">1479</td><td class="line"> info-&gt;cond.qualifier &gt; QUALIFIER_INVALID &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="1480"><td class="num" id="LN1480">1480</td><td class="line"> info-&gt;cond.qualifier &lt; QUALIFIER_LAST))</td></tr>
+<tr class="codeline" data-linenumber="1481"><td class="num" id="LN1481">1481</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1482"><td class="num" id="LN1482">1482</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1483"><td class="num" id="LN1483">1483</td><td class="line"> *phenomenon = info-&gt;cond.phenomenon;</td></tr>
+<tr class="codeline" data-linenumber="1484"><td class="num" id="LN1484">1484</td><td class="line"> *qualifier = info-&gt;cond.qualifier;</td></tr>
+<tr class="codeline" data-linenumber="1485"><td class="num" id="LN1485">1485</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1486"><td class="num" id="LN1486">1486</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1487"><td class="num" id="LN1487">1487</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1488"><td class="num" id="LN1488">1488</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1489"><td class="num" id="LN1489">1489</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1490"><td class="num" id="LN1490">1490</td><td class="line">weather_info_get_value_temp (WeatherInfo *info, TempUnit unit, gdouble *value)</td></tr>
+<tr class="codeline" data-linenumber="1491"><td class="num" id="LN1491">1491</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1492"><td class="num" id="LN1492">1492</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1493"><td class="num" id="LN1493">1493</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1494"><td class="num" id="LN1494">1494</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1495"><td class="num" id="LN1495">1495</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1496"><td class="num" id="LN1496">1496</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1497"><td class="num" id="LN1497">1497</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1498"><td class="num" id="LN1498">1498</td><td class="line"> <span class='keyword'>return</span> temperature_value (info-&gt;temp, unit, value, info-&gt;temperature_unit);</td></tr>
+<tr class="codeline" data-linenumber="1499"><td class="num" id="LN1499">1499</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1500"><td class="num" id="LN1500">1500</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1501"><td class="num" id="LN1501">1501</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1502"><td class="num" id="LN1502">1502</td><td class="line">weather_info_get_value_temp_min (WeatherInfo *info, TempUnit unit, gdouble *value)</td></tr>
+<tr class="codeline" data-linenumber="1503"><td class="num" id="LN1503">1503</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1504"><td class="num" id="LN1504">1504</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1505"><td class="num" id="LN1505">1505</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1506"><td class="num" id="LN1506">1506</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1507"><td class="num" id="LN1507">1507</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid || !info-&gt;tempMinMaxValid)</td></tr>
+<tr class="codeline" data-linenumber="1508"><td class="num" id="LN1508">1508</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1509"><td class="num" id="LN1509">1509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1510"><td class="num" id="LN1510">1510</td><td class="line"> <span class='keyword'>return</span> temperature_value (info-&gt;temp_min, unit, value, info-&gt;temperature_unit);</td></tr>
+<tr class="codeline" data-linenumber="1511"><td class="num" id="LN1511">1511</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1512"><td class="num" id="LN1512">1512</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1513"><td class="num" id="LN1513">1513</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1514"><td class="num" id="LN1514">1514</td><td class="line">weather_info_get_value_temp_max (WeatherInfo *info, TempUnit unit, gdouble *value)</td></tr>
+<tr class="codeline" data-linenumber="1515"><td class="num" id="LN1515">1515</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1516"><td class="num" id="LN1516">1516</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1517"><td class="num" id="LN1517">1517</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1518"><td class="num" id="LN1518">1518</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1519"><td class="num" id="LN1519">1519</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid || !info-&gt;tempMinMaxValid)</td></tr>
+<tr class="codeline" data-linenumber="1520"><td class="num" id="LN1520">1520</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1521"><td class="num" id="LN1521">1521</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1522"><td class="num" id="LN1522">1522</td><td class="line"> <span class='keyword'>return</span> temperature_value (info-&gt;temp_max, unit, value, info-&gt;temperature_unit);</td></tr>
+<tr class="codeline" data-linenumber="1523"><td class="num" id="LN1523">1523</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1524"><td class="num" id="LN1524">1524</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1525"><td class="num" id="LN1525">1525</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1526"><td class="num" id="LN1526">1526</td><td class="line">weather_info_get_value_dew (WeatherInfo *info, TempUnit unit, gdouble *value)</td></tr>
+<tr class="codeline" data-linenumber="1527"><td class="num" id="LN1527">1527</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1528"><td class="num" id="LN1528">1528</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1529"><td class="num" id="LN1529">1529</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1530"><td class="num" id="LN1530">1530</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1531"><td class="num" id="LN1531">1531</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1532"><td class="num" id="LN1532">1532</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1533"><td class="num" id="LN1533">1533</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1534"><td class="num" id="LN1534">1534</td><td class="line"> <span class='keyword'>return</span> temperature_value (info-&gt;dew, unit, value, info-&gt;temperature_unit);</td></tr>
+<tr class="codeline" data-linenumber="1535"><td class="num" id="LN1535">1535</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1536"><td class="num" id="LN1536">1536</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1537"><td class="num" id="LN1537">1537</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1538"><td class="num" id="LN1538">1538</td><td class="line">weather_info_get_value_apparent (WeatherInfo *info, TempUnit unit, gdouble *value)</td></tr>
+<tr class="codeline" data-linenumber="1539"><td class="num" id="LN1539">1539</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1540"><td class="num" id="LN1540">1540</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1541"><td class="num" id="LN1541">1541</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1542"><td class="num" id="LN1542">1542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1543"><td class="num" id="LN1543">1543</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1544"><td class="num" id="LN1544">1544</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1545"><td class="num" id="LN1545">1545</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1546"><td class="num" id="LN1546">1546</td><td class="line"> <span class='keyword'>return</span> temperature_value (calc_apparent (info), unit, value, info-&gt;temperature_unit);</td></tr>
+<tr class="codeline" data-linenumber="1547"><td class="num" id="LN1547">1547</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1548"><td class="num" id="LN1548">1548</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1549"><td class="num" id="LN1549">1549</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1550"><td class="num" id="LN1550">1550</td><td class="line">weather_info_get_value_update (WeatherInfo *info, time_t *value)</td></tr>
+<tr class="codeline" data-linenumber="1551"><td class="num" id="LN1551">1551</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1552"><td class="num" id="LN1552">1552</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1553"><td class="num" id="LN1553">1553</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1554"><td class="num" id="LN1554">1554</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1555"><td class="num" id="LN1555">1555</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1556"><td class="num" id="LN1556">1556</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1557"><td class="num" id="LN1557">1557</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1558"><td class="num" id="LN1558">1558</td><td class="line"> *value = info-&gt;update;</td></tr>
+<tr class="codeline" data-linenumber="1559"><td class="num" id="LN1559">1559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1560"><td class="num" id="LN1560">1560</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1561"><td class="num" id="LN1561">1561</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1562"><td class="num" id="LN1562">1562</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1563"><td class="num" id="LN1563">1563</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1564"><td class="num" id="LN1564">1564</td><td class="line">weather_info_get_value_sunrise (WeatherInfo *info, time_t *value)</td></tr>
+<tr class="codeline" data-linenumber="1565"><td class="num" id="LN1565">1565</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1566"><td class="num" id="LN1566">1566</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1567"><td class="num" id="LN1567">1567</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1568"><td class="num" id="LN1568">1568</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1569"><td class="num" id="LN1569">1569</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid || !info-&gt;sunriseValid)</td></tr>
+<tr class="codeline" data-linenumber="1570"><td class="num" id="LN1570">1570</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1571"><td class="num" id="LN1571">1571</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1572"><td class="num" id="LN1572">1572</td><td class="line"> *value = info-&gt;sunrise;</td></tr>
+<tr class="codeline" data-linenumber="1573"><td class="num" id="LN1573">1573</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1574"><td class="num" id="LN1574">1574</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1575"><td class="num" id="LN1575">1575</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1576"><td class="num" id="LN1576">1576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1577"><td class="num" id="LN1577">1577</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1578"><td class="num" id="LN1578">1578</td><td class="line">weather_info_get_value_sunset (WeatherInfo *info, time_t *value)</td></tr>
+<tr class="codeline" data-linenumber="1579"><td class="num" id="LN1579">1579</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1580"><td class="num" id="LN1580">1580</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1581"><td class="num" id="LN1581">1581</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1582"><td class="num" id="LN1582">1582</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1583"><td class="num" id="LN1583">1583</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid || !info-&gt;sunsetValid)</td></tr>
+<tr class="codeline" data-linenumber="1584"><td class="num" id="LN1584">1584</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1585"><td class="num" id="LN1585">1585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1586"><td class="num" id="LN1586">1586</td><td class="line"> *value = info-&gt;sunset;</td></tr>
+<tr class="codeline" data-linenumber="1587"><td class="num" id="LN1587">1587</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1588"><td class="num" id="LN1588">1588</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1589"><td class="num" id="LN1589">1589</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1590"><td class="num" id="LN1590">1590</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1591"><td class="num" id="LN1591">1591</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1592"><td class="num" id="LN1592">1592</td><td class="line">weather_info_get_value_moonphase (WeatherInfo *info,</td></tr>
+<tr class="codeline" data-linenumber="1593"><td class="num" id="LN1593">1593</td><td class="line"> WeatherMoonPhase *value,</td></tr>
+<tr class="codeline" data-linenumber="1594"><td class="num" id="LN1594">1594</td><td class="line"> WeatherMoonLatitude *lat)</td></tr>
+<tr class="codeline" data-linenumber="1595"><td class="num" id="LN1595">1595</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1596"><td class="num" id="LN1596">1596</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1597"><td class="num" id="LN1597">1597</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1598"><td class="num" id="LN1598">1598</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1599"><td class="num" id="LN1599">1599</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid || !info-&gt;moonValid)</td></tr>
+<tr class="codeline" data-linenumber="1600"><td class="num" id="LN1600">1600</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1601"><td class="num" id="LN1601">1601</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1602"><td class="num" id="LN1602">1602</td><td class="line"> *value = info-&gt;moonphase;</td></tr>
+<tr class="codeline" data-linenumber="1603"><td class="num" id="LN1603">1603</td><td class="line"> *lat = info-&gt;moonlatitude;</td></tr>
+<tr class="codeline" data-linenumber="1604"><td class="num" id="LN1604">1604</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1605"><td class="num" id="LN1605">1605</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1606"><td class="num" id="LN1606">1606</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1607"><td class="num" id="LN1607">1607</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1608"><td class="num" id="LN1608">1608</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1609"><td class="num" id="LN1609">1609</td><td class="line">weather_info_get_value_wind (WeatherInfo *info, SpeedUnit unit, gdouble *speed, WeatherWindDirection *direction)</td></tr>
+<tr class="codeline" data-linenumber="1610"><td class="num" id="LN1610">1610</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1611"><td class="num" id="LN1611">1611</td><td class="line"> gboolean res = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1612"><td class="num" id="LN1612">1612</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1613"><td class="num" id="LN1613">1613</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1614"><td class="num" id="LN1614">1614</td><td class="line"> <span class='macro'>g_return_val_if_fail (speed != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (speed != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "speed != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1615"><td class="num" id="LN1615">1615</td><td class="line"> <span class='macro'>g_return_val_if_fail (direction != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (direction != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "direction != NULL"<br>); return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1616"><td class="num" id="LN1616">1616</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1617"><td class="num" id="LN1617">1617</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1618"><td class="num" id="LN1618">1618</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1619"><td class="num" id="LN1619">1619</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1620"><td class="num" id="LN1620">1620</td><td class="line"> <span class='keyword'>if</span> (info-&gt;windspeed &lt; 0.0 || info-&gt;wind &lt;= WIND_INVALID || info-&gt;wind &gt;= WIND_LAST)</td></tr>
+<tr class="codeline" data-linenumber="1621"><td class="num" id="LN1621">1621</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1622"><td class="num" id="LN1622">1622</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1623"><td class="num" id="LN1623">1623</td><td class="line"> res = speed_value (info-&gt;windspeed, unit, speed, info-&gt;speed_unit);</td></tr>
+<tr class="codeline" data-linenumber="1624"><td class="num" id="LN1624">1624</td><td class="line"> *direction = info-&gt;wind;</td></tr>
+<tr class="codeline" data-linenumber="1625"><td class="num" id="LN1625">1625</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1626"><td class="num" id="LN1626">1626</td><td class="line"> <span class='keyword'>return</span> res;</td></tr>
+<tr class="codeline" data-linenumber="1627"><td class="num" id="LN1627">1627</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1628"><td class="num" id="LN1628">1628</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1629"><td class="num" id="LN1629">1629</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1630"><td class="num" id="LN1630">1630</td><td class="line">weather_info_get_value_pressure (WeatherInfo *info, PressureUnit unit, gdouble *value)</td></tr>
+<tr class="codeline" data-linenumber="1631"><td class="num" id="LN1631">1631</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1632"><td class="num" id="LN1632">1632</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1633"><td class="num" id="LN1633">1633</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1634"><td class="num" id="LN1634">1634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1635"><td class="num" id="LN1635">1635</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1636"><td class="num" id="LN1636">1636</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1637"><td class="num" id="LN1637">1637</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1638"><td class="num" id="LN1638">1638</td><td class="line"> <span class='keyword'>return</span> pressure_value (info-&gt;pressure, unit, value, info-&gt;pressure_unit);</td></tr>
+<tr class="codeline" data-linenumber="1639"><td class="num" id="LN1639">1639</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1640"><td class="num" id="LN1640">1640</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1641"><td class="num" id="LN1641">1641</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1642"><td class="num" id="LN1642">1642</td><td class="line">weather_info_get_value_visibility (WeatherInfo *info, DistanceUnit unit, gdouble *value)</td></tr>
+<tr class="codeline" data-linenumber="1643"><td class="num" id="LN1643">1643</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1644"><td class="num" id="LN1644">1644</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1645"><td class="num" id="LN1645">1645</td><td class="line"> <span class='macro'>g_return_val_if_fail (value != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (value != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "value != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1646"><td class="num" id="LN1646">1646</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1647"><td class="num" id="LN1647">1647</td><td class="line"> <span class='keyword'>if</span> (!info-&gt;valid)</td></tr>
+<tr class="codeline" data-linenumber="1648"><td class="num" id="LN1648">1648</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1649"><td class="num" id="LN1649">1649</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1650"><td class="num" id="LN1650">1650</td><td class="line"> <span class='keyword'>return</span> distance_value (info-&gt;visibility, unit, value, info-&gt;distance_unit);</td></tr>
+<tr class="codeline" data-linenumber="1651"><td class="num" id="LN1651">1651</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1652"><td class="num" id="LN1652">1652</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1653"><td class="num" id="LN1653">1653</td><td class="line"><span class='comment'>/**</span></td></tr>
+<tr class="codeline" data-linenumber="1654"><td class="num" id="LN1654">1654</td><td class="line"> <span class='comment'>* weather_info_get_upcoming_moonphases:</span></td></tr>
+<tr class="codeline" data-linenumber="1655"><td class="num" id="LN1655">1655</td><td class="line"> <span class='comment'>* @info: WeatherInfo containing the time_t of interest</span></td></tr>
+<tr class="codeline" data-linenumber="1656"><td class="num" id="LN1656">1656</td><td class="line"> <span class='comment'>* @phases: An array of four time_t values that will hold the returned values.</span></td></tr>
+<tr class="codeline" data-linenumber="1657"><td class="num" id="LN1657">1657</td><td class="line"> <span class='comment'>* The values are estimates of the time of the next new, quarter, full and</span></td></tr>
+<tr class="codeline" data-linenumber="1658"><td class="num" id="LN1658">1658</td><td class="line"> <span class='comment'>* three-quarter moons.</span></td></tr>
+<tr class="codeline" data-linenumber="1659"><td class="num" id="LN1659">1659</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="1660"><td class="num" id="LN1660">1660</td><td class="line"> <span class='comment'>* Returns: gboolean indicating success or failure</span></td></tr>
+<tr class="codeline" data-linenumber="1661"><td class="num" id="LN1661">1661</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="1662"><td class="num" id="LN1662">1662</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="1663"><td class="num" id="LN1663">1663</td><td class="line">weather_info_get_upcoming_moonphases (WeatherInfo *info, time_t *phases)</td></tr>
+<tr class="codeline" data-linenumber="1664"><td class="num" id="LN1664">1664</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1665"><td class="num" id="LN1665">1665</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1666"><td class="num" id="LN1666">1666</td><td class="line"> <span class='macro'>g_return_val_if_fail (phases != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (phases != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "phases != NULL"<br>); return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1667"><td class="num" id="LN1667">1667</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1668"><td class="num" id="LN1668">1668</td><td class="line"> <span class='keyword'>return</span> calc_moon_phases(info, phases);</td></tr>
+<tr class="codeline" data-linenumber="1669"><td class="num" id="LN1669">1669</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1670"><td class="num" id="LN1670">1670</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1671"><td class="num" id="LN1671">1671</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1672"><td class="num" id="LN1672">1672</td><td class="line">_weather_internal_check (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="1673"><td class="num" id="LN1673">1673</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1674"><td class="num" id="LN1674">1674</td><td class="line"> <span class='macro'>g_assert (G_N_ELEMENTS (wind_direction_str) == WIND_LAST)<span class='macro_popup'>do { if (__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if ((sizeof (wind_direction_str) / sizeof ((wind_direction_str<br>)[0])) == WIND_LAST) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1)) ; else g_assertion_message_expr<br> ("MateWeather", "weather.c", 1674, ((const char*) (__func__)<br>), "G_N_ELEMENTS (wind_direction_str) == WIND_LAST"); } while<br> (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1675"><td class="num" id="LN1675">1675</td><td class="line"> <span class='macro'>g_assert (G_N_ELEMENTS (sky_str) == SKY_LAST)<span class='macro_popup'>do { if (__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if ((sizeof (sky_str) / sizeof ((sky_str)[0])) == SKY_LAST)<br> _g_boolean_var_ = 1; else _g_boolean_var_ = 0; _g_boolean_var_<br>; }), 1)) ; else g_assertion_message_expr ("MateWeather", "weather.c"<br>, 1675, ((const char*) (__func__)), "G_N_ELEMENTS (sky_str) == SKY_LAST"<br>); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1676"><td class="num" id="LN1676">1676</td><td class="line"> <span class='macro'>g_assert (G_N_ELEMENTS (conditions_str) == PHENOMENON_LAST)<span class='macro_popup'>do { if (__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if ((sizeof (conditions_str) / sizeof ((conditions_str)[0])<br>) == PHENOMENON_LAST) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1)) ; else g_assertion_message_expr<br> ("MateWeather", "weather.c", 1676, ((const char*) (__func__)<br>), "G_N_ELEMENTS (conditions_str) == PHENOMENON_LAST"); } while<br> (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1677"><td class="num" id="LN1677">1677</td><td class="line"> <span class='macro'>g_assert (G_N_ELEMENTS (conditions_str[0]) == QUALIFIER_LAST)<span class='macro_popup'>do { if (__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if ((sizeof (conditions_str[0]) / sizeof ((conditions_str[0<br>])[0])) == QUALIFIER_LAST) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1)) ; else g_assertion_message_expr<br> ("MateWeather", "weather.c", 1677, ((const char*) (__func__)<br>), "G_N_ELEMENTS (conditions_str[0]) == QUALIFIER_LAST"); } while<br> (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1678"><td class="num" id="LN1678">1678</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/[email protected]_master/report-565580.html b/[email protected]_master/report-565580.html
new file mode 100644
index 0000000..97a4fc7
--- /dev/null
+++ b/[email protected]_master/report-565580.html
@@ -0,0 +1,917 @@
+<!doctype html>
+<html>
+<head>
+<title>weather-metar.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'i' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Dead store -->
+
+<!-- BUGFILE /rootdir/libmateweather/weather-metar.c -->
+
+<!-- FILENAME weather-metar.c -->
+
+<!-- FUNCTIONNAME metar_parse -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT d766a0e5bf18a00e3f5446f823316a7b -->
+
+<!-- BUGLINE 454 -->
+
+<!-- BUGCOLUMN 5 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>weather-metar.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 454, column 5</a><br />Value stored to 'i' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name weather-metar.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/11.0.0 -D HAVE_CONFIG_H -I . -I .. -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I .. -I . -I /usr/include/libxml2 -I /usr/include/libsoup-2.4 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/libxml2 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -D G_LOG_DOMAIN="MateWeather" -D MATELOCALEDIR="/usr/local/share/locale" -D MATEWEATHER_XML_LOCATION_DIR="/usr/local/share/libmateweather" -D PIC -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/11.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-sign-compare -fdebug-compilation-dir /rootdir/libmateweather -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2020-11-18-212044-5793-1 -x c weather-metar.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"454": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "S") {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].checked = !checked;
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+</form>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ s.classList.remove("selected");
+ });
+ el.classList.add("selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+}
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "j") {
+ navigateTo(/*up=*/false);
+ } else if (event.key == "k") {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"><span class='comment'>/* weather-metar.c - Weather server functions (METAR)</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* along with this program; if not, see</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* &lt;http://www.gnu.org/licenses/&gt;.</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_CONFIG_H<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"><span class='directive'>#include &lt;config.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;regex.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include "weather.h"</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include "weather-priv.h"</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='keyword'>enum</span> {</td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> TIME_RE,</td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> WIND_RE,</td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> VIS_RE,</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> COND_RE,</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"> CLOUD_RE,</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> TEMP_RE,</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> PRES_RE,</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> RE_NUM</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/* Return time of weather report as secs since epoch UTC */</span></td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> time_t</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line">make_time (gint utcDate, gint utcHour, gint utcMin)</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>const</span> time_t now = time (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> <span class='keyword'>struct</span> tm tm;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> localtime_r (&amp;now, &amp;tm);</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> <span class='comment'>/* If last reading took place just before midnight UTC on the</span></td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> <span class='comment'>* first, adjust the date downward to allow for the month</span></td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> <span class='comment'>* change-over. This ASSUMES that the reading won't be more than</span></td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> <span class='comment'>* 24 hrs old! */</span></td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>if</span> ((utcDate &gt; tm.tm_mday) &amp;&amp; (tm.tm_mday == 1)) {</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> tm.tm_mday = 0; <span class='comment'>/* mktime knows this is the last day of the previous</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> <span class='comment'>* month. */</span></td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> tm.tm_mday = utcDate;</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> tm.tm_hour = utcHour;</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> tm.tm_min = utcMin;</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> tm.tm_sec = 0;</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='comment'>/* mktime() assumes value is local, not UTC. Use tm_gmtoff to compensate */</span></td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_TM_TM_GMOFF<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='keyword'>return</span> tm.tm_gmtoff + mktime (&amp;tm);</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"><span class='directive'>#elif defined HAVE_TIMEZONE</span></td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> <span class='keyword'>return</span> timezone + mktime (&amp;tm);</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line">metar_tok_time (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> gint day, hr, min;</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> sscanf (tokp, <span class='string_literal'>"%2u%2u%2u"</span>, &amp;day, &amp;hr, &amp;min);</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> info-&gt;update = make_time (day, hr, min);</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line">metar_tok_wind (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> gchar sdir[4], sspd[4], sgust[4];</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> gint dir, spd = -1;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> gchar *gustp;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> size_t glen;</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> strncpy (sdir, tokp, 3);</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> sdir[3] = 0;</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> dir = (!strcmp (sdir, <span class='string_literal'>"VRB"</span>)) ? -1 : atoi (sdir);</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> memset (sspd, 0, <span class='keyword'>sizeof</span> (sspd));</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> glen = strspn (tokp + 3, <span class='macro'>CONST_DIGITS<span class='macro_popup'>"0123456789"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> strncpy (sspd, tokp + 3, glen);</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> spd = atoi (sspd);</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> tokp += glen + 3;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gustp = strchr (tokp, 'G');</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> <span class='keyword'>if</span> (gustp) {</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> memset (sgust, 0, <span class='keyword'>sizeof</span> (sgust));</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> glen = strspn (gustp + 1, <span class='macro'>CONST_DIGITS<span class='macro_popup'>"0123456789"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> strncpy (sgust, gustp + 1, glen);</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> tokp = gustp + 1 + glen;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>if</span> (!strcmp (tokp, <span class='string_literal'>"MPS"</span>))</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> info-&gt;windspeed = <span class='macro'>WINDSPEED_MS_TO_KNOTS ((WeatherWindSpeed)spd)<span class='macro_popup'>(((WeatherWindSpeed)spd) / 0.514444)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> info-&gt;windspeed = (WeatherWindSpeed)spd;</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='keyword'>if</span> ((349 &lt;= dir) || (dir &lt;= 11))</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> info-&gt;wind = WIND_N;</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((12 &lt;= dir) &amp;&amp; (dir &lt;= 33))</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> info-&gt;wind = WIND_NNE;</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((34 &lt;= dir) &amp;&amp; (dir &lt;= 56))</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> info-&gt;wind = WIND_NE;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((57 &lt;= dir) &amp;&amp; (dir &lt;= 78))</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> info-&gt;wind = WIND_ENE;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((79 &lt;= dir) &amp;&amp; (dir &lt;= 101))</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> info-&gt;wind = WIND_E;</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((102 &lt;= dir) &amp;&amp; (dir &lt;= 123))</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> info-&gt;wind = WIND_ESE;</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((124 &lt;= dir) &amp;&amp; (dir &lt;= 146))</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> info-&gt;wind = WIND_SE;</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((147 &lt;= dir) &amp;&amp; (dir &lt;= 168))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> info-&gt;wind = WIND_SSE;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((169 &lt;= dir) &amp;&amp; (dir &lt;= 191))</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> info-&gt;wind = WIND_S;</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((192 &lt;= dir) &amp;&amp; (dir &lt;= 213))</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> info-&gt;wind = WIND_SSW;</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((214 &lt;= dir) &amp;&amp; (dir &lt;= 236))</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> info-&gt;wind = WIND_SW;</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((237 &lt;= dir) &amp;&amp; (dir &lt;= 258))</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> info-&gt;wind = WIND_WSW;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((259 &lt;= dir) &amp;&amp; (dir &lt;= 281))</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> info-&gt;wind = WIND_W;</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((282 &lt;= dir) &amp;&amp; (dir &lt;= 303))</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> info-&gt;wind = WIND_WNW;</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((304 &lt;= dir) &amp;&amp; (dir &lt;= 326))</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> info-&gt;wind = WIND_NW;</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((327 &lt;= dir) &amp;&amp; (dir &lt;= 348))</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> info-&gt;wind = WIND_NNW;</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line">metar_tok_vis (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> gchar *pfrac, *pend, *psp;</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> gchar sval[6];</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> gint num, den, val;</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> memset (sval, 0, <span class='keyword'>sizeof</span> (sval));</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (!strcmp (tokp,<span class='string_literal'>"CAVOK"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>// "Ceiling And Visibility OK": visibility &gt;= 10 KM</span></td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> info-&gt;visibility=10000. / <span class='macro'>VISIBILITY_SM_TO_M (1.)<span class='macro_popup'>(((1.) * 1.609344) * 1000)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> info-&gt;sky = SKY_CLEAR;</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (0 != (pend = strstr (tokp, <span class='string_literal'>"SM"</span>))) {</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>// US observation: field ends with "SM"</span></td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> pfrac = strchr (tokp, '/');</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>if</span> (pfrac) {</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> <span class='keyword'>if</span> (*tokp == 'M') {</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> info-&gt;visibility = 0.001;</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> num = (*(pfrac - 1) - '0');</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> strncpy (sval, pfrac + 1, pend - pfrac - 1);</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> den = atoi (sval);</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> info-&gt;visibility =</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> ((WeatherVisibility)num / ((WeatherVisibility)den));</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> psp = strchr (tokp, ' ');</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='keyword'>if</span> (psp) {</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> *psp = '\0';</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> val = atoi (tokp);</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> info-&gt;visibility += (WeatherVisibility)val;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> strncpy (sval, tokp, pend - tokp);</td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> val = atoi (sval);</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> info-&gt;visibility = (WeatherVisibility)val;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='comment'>// International observation: NNNN(DD NNNNDD)?</span></td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='comment'>// For now: use only the minimum visibility and ignore its direction</span></td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> strncpy (sval, tokp, strspn (tokp, <span class='macro'>CONST_DIGITS<span class='macro_popup'>"0123456789"</span></span>));</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> val = atoi (sval);</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> info-&gt;visibility = (WeatherVisibility)val / <span class='macro'>VISIBILITY_SM_TO_M (1.)<span class='macro_popup'>(((1.) * 1.609344) * 1000)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line">metar_tok_cloud (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> gchar stype[4], salt[4];</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> strncpy (stype, tokp, 3);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> stype[3] = 0;</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> <span class='keyword'>if</span> (strlen (tokp) == 6) {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> strncpy (salt, tokp + 3, 3);</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> salt[3] = 0;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"CLR"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> info-&gt;sky = SKY_CLEAR;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"SKC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> info-&gt;sky = SKY_CLEAR;</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"NSC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> info-&gt;sky = SKY_CLEAR;</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"BKN"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> info-&gt;sky = SKY_BROKEN;</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"SCT"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> info-&gt;sky = SKY_SCATTERED;</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"FEW"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> info-&gt;sky = SKY_FEW;</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"OVC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> info-&gt;sky = SKY_OVERCAST;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line">metar_tok_pres (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> <span class='keyword'>if</span> (*tokp == 'A') {</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> gchar sintg[3], sfract[3];</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> gint intg, fract;</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> strncpy (sintg, tokp + 1, 2);</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> sintg[2] = 0;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> intg = atoi (sintg);</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> strncpy (sfract, tokp + 3, 2);</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> sfract[2] = 0;</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> fract = atoi (sfract);</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> info-&gt;pressure = (WeatherPressure)intg + (((WeatherPressure)fract)/100.0);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> } <span class='keyword'>else</span> { <span class='comment'>/* *tokp == 'Q' */</span></td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> gchar spres[5];</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> gint pres;</td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> strncpy (spres, tokp + 1, 4);</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> spres[4] = 0;</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> pres = atoi (spres);</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> info-&gt;pressure = <span class='macro'>PRESSURE_MBAR_TO_INCH ((WeatherPressure)pres)<span class='macro_popup'>(((WeatherPressure)pres) * 0.029533373)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line">metar_tok_temp (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> gchar *ptemp, *pdew, *psep;</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> psep = strchr (tokp, '/');</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> *psep = 0;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> ptemp = tokp;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> pdew = psep + 1;</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> info-&gt;temp = (*ptemp == 'M') ? <span class='macro'>TEMP_C_TO_F (-atoi (ptemp + 1))<span class='macro_popup'>(((-atoi (ptemp + 1)) * (9.0/5.0)) + 32.0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> : <span class='macro'>TEMP_C_TO_F (atoi (ptemp))<span class='macro_popup'>(((atoi (ptemp)) * (9.0/5.0)) + 32.0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> <span class='keyword'>if</span> (*pdew) {</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> info-&gt;dew = (*pdew == 'M') ? <span class='macro'>TEMP_C_TO_F (-atoi (pdew + 1))<span class='macro_popup'>(((-atoi (pdew + 1)) * (9.0/5.0)) + 32.0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> : <span class='macro'>TEMP_C_TO_F (atoi (pdew))<span class='macro_popup'>(((atoi (pdew)) * (9.0/5.0)) + 32.0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> info-&gt;dew = -1000.0;</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line">metar_tok_cond (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> gchar squal[3], sphen[4];</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> gchar *pphen;</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>if</span> ((strlen (tokp) &gt; 3) &amp;&amp; ((*tokp == '+') || (*tokp == '-')))</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> ++tokp; <span class='comment'>/* FIX */</span></td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> <span class='keyword'>if</span> ((*tokp == '+') || (*tokp == '-'))</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> pphen = tokp + 1;</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strlen (tokp) &lt; 4)</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> pphen = tokp;</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> pphen = tokp + 2;</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> memset (squal, 0, <span class='keyword'>sizeof</span> (squal));</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> strncpy (squal, tokp, pphen - tokp);</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> squal[pphen - tokp] = 0;</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> memset (sphen, 0, <span class='keyword'>sizeof</span> (sphen));</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> strncpy (sphen, pphen, <span class='keyword'>sizeof</span> (sphen));</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> sphen[<span class='keyword'>sizeof</span> (sphen)-1] = '\0';</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='comment'>/* Defaults */</span></td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_NONE;</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_NONE;</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> info-&gt;cond.significant = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>""</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_MODERATE;</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"-"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_LIGHT;</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"+"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_HEAVY;</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"VC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_VICINITY;</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"MI"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_SHALLOW;</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"BC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_PATCHES;</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"PR"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_PARTIAL;</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"TS"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_THUNDERSTORM;</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"BL"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_BLOWING;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"SH"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_SHOWERS;</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"DR"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_DRIFTING;</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"FZ"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_FREEZING;</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"DZ"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_DRIZZLE;</td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"RA"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_RAIN;</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"SN"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_SNOW;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"SG"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_SNOW_GRAINS;</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"IC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_ICE_CRYSTALS;</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"PE"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_ICE_PELLETS;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"GR"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_HAIL;</td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"GS"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_SMALL_HAIL;</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"UP"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_UNKNOWN_PRECIPITATION;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"BR"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_MIST;</td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"FG"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_FOG;</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"FU"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_SMOKE;</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"VA"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_VOLCANIC_ASH;</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"SA"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_SAND;</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"HZ"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_HAZE;</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"PY"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_SPRAY;</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"DU"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_DUST;</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"SQ"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_SQUALL;</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"SS"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_SANDSTORM;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"DS"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_DUSTSTORM;</td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"PO"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_DUST_WHIRLS;</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"+FC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_TORNADO;</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (sphen, <span class='string_literal'>"FC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_FUNNEL_CLOUD;</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> ((info-&gt;cond.qualifier != QUALIFIER_NONE) || (info-&gt;cond.phenomenon != PHENOMENON_NONE))</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> info-&gt;cond.significant = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"><span class='directive'>#define <span class='macro'>TIME_RE_STR<span class='macro_popup'>"([0-9]{6})Z"</span></span> "([0-9]{6})Z"</span></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"><span class='directive'>#define <span class='macro'>WIND_RE_STR<span class='macro_popup'>"(([0-9]{3})|VRB)([0-9]?[0-9]{2})(G[0-9]?[0-9]{2})?(KT|MPS)"</span></span> "(([0-9]{3})|VRB)([0-9]?[0-9]{2})(G[0-9]?[0-9]{2})?(KT|MPS)"</span></td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"><span class='directive'>#define <span class='macro'>VIS_RE_STR<span class='macro_popup'>"((([0-9]?[0-9])|(M?([12] )?([1357]/1?[0-9])))SM)|" "([0-9]{4}(N|NE|E|SE|S|SW|W|NW( [0-9]{4}(N|NE|E|SE|S|SW|W|NW))?)?)|"<br> "CAVOK"</span></span> "((([0-9]?[0-9])|(M?([12] )?([1357]/1?[0-9])))SM)|" \</span></td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='directive'>"([0-9]{4}(N|NE|E|SE|S|SW|W|NW( [0-9]{4}(N|NE|E|SE|S|SW|W|NW))?)?)|" \</span></td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> <span class='directive'>"CAVOK"</span></td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"><span class='directive'>#define <span class='macro'>COND_RE_STR<span class='macro_popup'>"(-|\\+)?(VC|MI|BC|PR|TS|BL|SH|DR|FZ)?(DZ|RA|SN|SG|IC|PE|GR|GS|UP|BR|FG|FU|VA|SA|HZ|PY|DU|SQ|SS|DS|PO|\\+?FC)"</span></span> "(-|\\+)?(VC|MI|BC|PR|TS|BL|SH|DR|FZ)?(DZ|RA|SN|SG|IC|PE|GR|GS|UP|BR|FG|FU|VA|SA|HZ|PY|DU|SQ|SS|DS|PO|\\+?FC)"</span></td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"><span class='directive'>#define <span class='macro'>CLOUD_RE_STR<span class='macro_popup'>"((CLR|BKN|SCT|FEW|OVC|SKC|NSC)([0-9]{3}|///)?(CB|TCU|///)?)"</span></span> "((CLR|BKN|SCT|FEW|OVC|SKC|NSC)([0-9]{3}|///)?(CB|TCU|///)?)"</span></td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"><span class='directive'>#define <span class='macro'>TEMP_RE_STR<span class='macro_popup'>"(M?[0-9][0-9])/(M?(//|[0-9][0-9])?)"</span></span> "(M?[0-9][0-9])/(M?(//|[0-9][0-9])?)"</span></td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"><span class='directive'>#define <span class='macro'>PRES_RE_STR<span class='macro_popup'>"(A|Q)([0-9]{4})"</span></span> "(A|Q)([0-9]{4})"</span></td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"><span class='comment'>/* POSIX regular expressions do not allow us to express "match whole words</span></td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='comment'>* only" in a simple way, so we have to wrap them all into</span></td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> <span class='comment'>* (^| )(...regex...)( |$)</span></td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"><span class='directive'>#define <span class='macro'>RE_PREFIX<span class='macro_popup'>"(^| )("</span></span> "(^| )("</span></td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"><span class='directive'>#define <span class='macro'>RE_SUFFIX<span class='macro_popup'>")( |$)"</span></span> ")( |$)"</span></td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"><span class='keyword'>static</span> regex_t metar_re[RE_NUM];</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> (*metar_f[RE_NUM]) (gchar *tokp, WeatherInfo *info);</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line">metar_init_re (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='keyword'>static</span> gboolean initialized = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> <span class='keyword'>if</span> (initialized)</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> initialized = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> regcomp (&amp;metar_re[TIME_RE], <span class='macro'>RE_PREFIX<span class='macro_popup'>"(^| )("</span></span> <span class='macro'>TIME_RE_STR<span class='macro_popup'>"([0-9]{6})Z"</span></span> <span class='macro'>RE_SUFFIX<span class='macro_popup'>")( |$)"</span></span>, <span class='macro'>REG_EXTENDED<span class='macro_popup'>1</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> regcomp (&amp;metar_re[WIND_RE], <span class='macro'>RE_PREFIX<span class='macro_popup'>"(^| )("</span></span> <span class='macro'>WIND_RE_STR<span class='macro_popup'>"(([0-9]{3})|VRB)([0-9]?[0-9]{2})(G[0-9]?[0-9]{2})?(KT|MPS)"</span></span> <span class='macro'>RE_SUFFIX<span class='macro_popup'>")( |$)"</span></span>, <span class='macro'>REG_EXTENDED<span class='macro_popup'>1</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> regcomp (&amp;metar_re[VIS_RE], <span class='macro'>RE_PREFIX<span class='macro_popup'>"(^| )("</span></span> <span class='macro'>VIS_RE_STR<span class='macro_popup'>"((([0-9]?[0-9])|(M?([12] )?([1357]/1?[0-9])))SM)|" "([0-9]{4}(N|NE|E|SE|S|SW|W|NW( [0-9]{4}(N|NE|E|SE|S|SW|W|NW))?)?)|"<br> "CAVOK"</span></span> <span class='macro'>RE_SUFFIX<span class='macro_popup'>")( |$)"</span></span>, <span class='macro'>REG_EXTENDED<span class='macro_popup'>1</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> regcomp (&amp;metar_re[COND_RE], <span class='macro'>RE_PREFIX<span class='macro_popup'>"(^| )("</span></span> <span class='macro'>COND_RE_STR<span class='macro_popup'>"(-|\\+)?(VC|MI|BC|PR|TS|BL|SH|DR|FZ)?(DZ|RA|SN|SG|IC|PE|GR|GS|UP|BR|FG|FU|VA|SA|HZ|PY|DU|SQ|SS|DS|PO|\\+?FC)"</span></span> <span class='macro'>RE_SUFFIX<span class='macro_popup'>")( |$)"</span></span>, <span class='macro'>REG_EXTENDED<span class='macro_popup'>1</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> regcomp (&amp;metar_re[CLOUD_RE], <span class='macro'>RE_PREFIX<span class='macro_popup'>"(^| )("</span></span> <span class='macro'>CLOUD_RE_STR<span class='macro_popup'>"((CLR|BKN|SCT|FEW|OVC|SKC|NSC)([0-9]{3}|///)?(CB|TCU|///)?)"</span></span> <span class='macro'>RE_SUFFIX<span class='macro_popup'>")( |$)"</span></span>, <span class='macro'>REG_EXTENDED<span class='macro_popup'>1</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> regcomp (&amp;metar_re[TEMP_RE], <span class='macro'>RE_PREFIX<span class='macro_popup'>"(^| )("</span></span> <span class='macro'>TEMP_RE_STR<span class='macro_popup'>"(M?[0-9][0-9])/(M?(//|[0-9][0-9])?)"</span></span> <span class='macro'>RE_SUFFIX<span class='macro_popup'>")( |$)"</span></span>, <span class='macro'>REG_EXTENDED<span class='macro_popup'>1</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> regcomp (&amp;metar_re[PRES_RE], <span class='macro'>RE_PREFIX<span class='macro_popup'>"(^| )("</span></span> <span class='macro'>PRES_RE_STR<span class='macro_popup'>"(A|Q)([0-9]{4})"</span></span> <span class='macro'>RE_SUFFIX<span class='macro_popup'>")( |$)"</span></span>, <span class='macro'>REG_EXTENDED<span class='macro_popup'>1</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> metar_f[TIME_RE] = metar_tok_time;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> metar_f[WIND_RE] = metar_tok_wind;</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> metar_f[VIS_RE] = metar_tok_vis;</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> metar_f[COND_RE] = metar_tok_cond;</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> metar_f[CLOUD_RE] = metar_tok_cloud;</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> metar_f[TEMP_RE] = metar_tok_temp;</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> metar_f[PRES_RE] = metar_tok_pres;</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">metar_parse (gchar *metar, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> gchar *p;</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='comment'>//gchar *rmk;</span></td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> gint i, i2;</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> regmatch_t rm, rm2;</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> gchar *tokp;</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> <span class='macro'>g_return_val_if_fail (metar != NULL, FALSE)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (metar != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "metar != NULL")<br>; return ((0)); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> metar_init_re ();</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> <span class='comment'>* Force parsing to end at "RMK" field. This prevents a subtle</span></td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> <span class='comment'>* problem when info within the remark happens to match an earlier state</span></td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='comment'>* and, as a result, throws off all the remaining expression</span></td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (0 != (p = strstr (metar, <span class='string_literal'>" RMK "</span>))) {</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> *p = '\0';</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> <span class='comment'>//rmk = p + 5; // uncomment this if RMK data becomes useful</span></td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> p = metar;</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> i = <span class="mrange">TIME_RE</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:5ex">Value stored to 'i' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='keyword'>while</span> (*p) {</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> i2 = RE_NUM;</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> rm2.rm_so = strlen (p);</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> rm2.rm_eo = rm2.rm_so;</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; RE_NUM &amp;&amp; rm2.rm_so &gt; 0; i++) {</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='keyword'>if</span> (0 == regexec (&amp;metar_re[i], p, 1, &amp;rm, 0)</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> &amp;&amp; rm.rm_so &lt; rm2.rm_so)</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> i2 = i;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> <span class='comment'>/* Skip leading and trailing space characters, if present.</span></td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> <span class='comment'>(the regular expressions include those characters to</span></td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> <span class='comment'>only get matches limited to whole words). */</span></td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> <span class='keyword'>if</span> (p[rm.rm_so] == ' ') rm.rm_so++;</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>if</span> (p[rm.rm_eo - 1] == ' ') rm.rm_eo--;</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> rm2.rm_so = rm.rm_so;</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> rm2.rm_eo = rm.rm_eo;</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='keyword'>if</span> (i2 != RE_NUM) {</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> tokp = g_strndup (p + rm2.rm_so, rm2.rm_eo - rm2.rm_so);</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> metar_f[i2] (tokp, info);</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> g_free (tokp);</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> p += rm2.rm_eo;</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> p += strspn (p, <span class='string_literal'>" "</span>);</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">metar_finish (SoupSession *session, SoupMessage *msg, gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> WeatherInfo *info = (WeatherInfo *)data;</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> WeatherLocation *loc;</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>const</span> gchar *p, *endtag;</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> gchar *searchkey, *metar;</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> gboolean success = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='macro'>g_return_if_fail (info != NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return; } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> <span class='keyword'>if</span> (!<span class='macro'>SOUP_STATUS_IS_SUCCESSFUL (msg-&gt;status_code)<span class='macro_popup'>((msg-&gt;status_code) &gt;= 200 &amp;&amp; (msg-&gt;status_code<br>) &lt; 300)</span></span>) {</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>SOUP_STATUS_IS_TRANSPORT_ERROR (msg-&gt;status_code)<span class='macro_popup'>((msg-&gt;status_code) &gt; 0 &amp;&amp; (msg-&gt;status_code<br>) &lt; 100)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> info-&gt;network_error = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='comment'>/* Translators: %d is an error code, and %s the error string */</span></td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"Failed to get METAR data: %d %s.\n"</span>)<span class='macro_popup'>(mateweather_gettext ("Failed to get METAR data: %d %s.\n"))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> msg-&gt;status_code, msg-&gt;reason_phrase);</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> request_done (info, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> loc = info-&gt;location;</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> searchkey = g_strdup_printf (<span class='string_literal'>"&lt;raw_text&gt;%s"</span>, loc-&gt;code);</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> p = strstr (msg-&gt;response_body-&gt;data, searchkey);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> g_free (searchkey);</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> <span class='keyword'>if</span> (p) {</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> p += <span class='macro'>WEATHER_LOCATION_CODE_LEN<span class='macro_popup'>4</span></span> + 11;</td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> endtag = strstr (p, <span class='string_literal'>"&lt;/raw_text&gt;"</span>);</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> <span class='keyword'>if</span> (endtag)</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> metar = g_strndup (p, endtag - p);</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> metar = g_strdup (p);</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> success = metar_parse (metar, info);</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> g_free (metar);</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strstr (msg-&gt;response_body-&gt;data, <span class='string_literal'>"aviationweather.gov"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> <span class='comment'>/* The response doesn't even seem to have come from NOAA...</span></td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='comment'>* most likely it is a wifi hotspot login page. Call that a</span></td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> <span class='comment'>* network error.</span></td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> info-&gt;network_error = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> info-&gt;valid = success;</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> request_done (info, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"><span class='comment'>/* Read current conditions and fill in info structure */</span></td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">metar_start_open (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> WeatherLocation *loc;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> SoupMessage *msg;</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='macro'>g_return_if_fail (info != NULL)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return; } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> info-&gt;valid = info-&gt;network_error = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> loc = info-&gt;location;</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>if</span> (loc == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"WeatherInfo missing location"</span>)<span class='macro_popup'>(mateweather_gettext ("WeatherInfo missing location"))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> msg = soup_form_request_new (</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> <span class='string_literal'>"GET"</span>, <span class='string_literal'>"https://www.aviationweather.gov/adds/dataserver_current/httpparam"</span>,</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> <span class='string_literal'>"dataSource"</span>, <span class='string_literal'>"metars"</span>,</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='string_literal'>"requestType"</span>, <span class='string_literal'>"retrieve"</span>,</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> <span class='string_literal'>"format"</span>, <span class='string_literal'>"xml"</span>,</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> <span class='string_literal'>"hoursBeforeNow"</span>, <span class='string_literal'>"3"</span>,</td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='string_literal'>"mostRecent"</span>, <span class='string_literal'>"true"</span>,</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='string_literal'>"fields"</span>, <span class='string_literal'>"raw_text"</span>,</td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> <span class='string_literal'>"stationString"</span>, loc-&gt;code,</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> soup_session_queue_message (info-&gt;session, msg, metar_finish, info);</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> info-&gt;requests_pending++;</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/[email protected]_master/report-57bf16.html b/[email protected]_master/report-57bf16.html
new file mode 100644
index 0000000..2faf409
--- /dev/null
+++ b/[email protected]_master/report-57bf16.html
@@ -0,0 +1,433 @@
+<!doctype html>
+<html>
+<head>
+<title>test_metar.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Opened file is never closed; potential resource leak -->
+
+<!-- BUGTYPE Resource Leak -->
+
+<!-- BUGCATEGORY Unix Stream API Error -->
+
+<!-- BUGFILE /rootdir/libmateweather/test_metar.c -->
+
+<!-- FILENAME test_metar.c -->
+
+<!-- FUNCTIONNAME main -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 3d7553bc3a6b66b21a2fbf7209eca6d1 -->
+
+<!-- BUGLINE 73 -->
+
+<!-- BUGCOLUMN 12 -->
+
+<!-- BUGPATHLENGTH 8 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>test_metar.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 73, column 12</a><br />Opened file is never closed; potential resource leak</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name test_metar.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/11.0.0 -D HAVE_CONFIG_H -I . -I .. -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I .. -I . -I /usr/include/libsoup-2.4 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/libxml2 -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/11.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-sign-compare -fdebug-compilation-dir /rootdir/libmateweather -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2020-11-18-212044-5793-1 -x c test_metar.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"16": 1, "17": 1, "18": 1, "19": 1, "20": 1, "21": 1, "22": 1, "26": 1, "27": 1, "28": 1, "29": 1, "30": 1, "32": 1, "33": 1, "34": 1, "36": 1, "40": 1, "41": 1, "42": 1, "50": 1, "73": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "S") {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].checked = !checked;
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+</form>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ s.classList.remove("selected");
+ });
+ el.classList.add("selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+}
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "j") {
+ navigateTo(/*up=*/false);
+ } else if (event.key == "k") {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Simple program to reproduce METAR parsing results from command line</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"><span class='directive'>#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"><span class='directive'>#include "weather-priv.h"</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"><span class='directive'>#ifndef <span class='macro'>BUFLEN<span class='macro_popup'>4096</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"><span class='directive'>#define <span class='macro'>BUFLEN<span class='macro_popup'>4096</span></span> 4096</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"><span class='directive'>#endif /* BUFLEN */</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> **argv)</td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> FILE* stream = <span class='macro'>stdin<span class='macro_popup'>stdin</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> gchar* filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> GOptionEntry entries[] = {</td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> { <span class='string_literal'>"file"</span>, 'f', 0, G_OPTION_ARG_FILENAME, &amp;filename,</td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='string_literal'>"file constaining metar observations"</span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> },</td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> { <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> }</td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> };</td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> GOptionContext* context;</td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"> GError* error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> <span class='keyword'>char</span> buf[<span class='macro'>BUFLEN<span class='macro_popup'>4096</span></span>];</td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"> <span class='keyword'>int</span> len;</td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> WeatherInfo info;</td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> context = g_option_context_new (<span class='string_literal'>"- test libmateweather metar parser"</span>);</td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> g_option_context_add_main_entries (context, entries, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> g_option_context_parse (context, &amp;argc, &amp;argv, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> <span class='keyword'>if</span> (<span class="mrange">error</span>) {</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path1" class="msg msgEvent" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">1</div></td><td>Assuming 'error' is null</td><td><div class="PathNav"><a href="#Path2" title="Next event (2)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path2" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">2</div></td><td><div class="PathNav"><a href="#Path1" title="Previous event (1)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path3" title="Next event (3)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"> perror (error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> <span class='keyword'>return</span> error-&gt;code;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>if</span> (<span class="mrange">filename</span>) {</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path3" class="msg msgEvent" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">3</div></td><td><div class="PathNav"><a href="#Path2" title="Previous event (2)">&#x2190;</a></div></td><td>Assuming 'filename' is non-null</td><td><div class="PathNav"><a href="#Path4" title="Next event (4)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path4" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">4</div></td><td><div class="PathNav"><a href="#Path3" title="Previous event (3)">&#x2190;</a></div></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path5" title="Next event (5)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> stream = fopen (filename, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>if</span> (<span class="mrange">!stream</span>) {</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path5" class="msg msgEvent" style="margin-left:13ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">5</div></td><td><div class="PathNav"><a href="#Path4" title="Previous event (4)">&#x2190;</a></div></td><td>Assuming 'stream' is non-null</td><td><div class="PathNav"><a href="#Path6" title="Next event (6)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path6" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">6</div></td><td><div class="PathNav"><a href="#Path5" title="Previous event (5)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path7" title="Next event (7)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> perror (<span class='string_literal'>"fopen"</span>);</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> <span class='keyword'>return</span> -1;</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Enter a METAR string...\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> <span class='keyword'>while</span> (fgets (buf, <span class='keyword'>sizeof</span> (buf), stream)) {</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path7" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">7</div></td><td><div class="PathNav"><a href="#Path6" title="Previous event (6)">&#x2190;</a></div></td><td>Loop condition is false. Execution continues on line 73</td><td><div class="PathNav"><a href="#EndPath" title="Next event (8)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> len = strlen (buf);</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> <span class='keyword'>if</span> (buf[len - 1] == '\n') {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> buf[--len] = '\0';</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> printf (<span class='string_literal'>"\n%s\n"</span>, buf);</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> memset (&amp;info, 0, <span class='keyword'>sizeof</span> (info));</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> info.valid = 1;</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> metar_parse (buf, &amp;info);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> weather_info_to_metric (&amp;info);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> printf (<span class='string_literal'>"Returned info:\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> printf (<span class='string_literal'>" update: %s"</span>, ctime (&amp;info.update));</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> printf (<span class='string_literal'>" sky: %s\n"</span>, weather_info_get_sky (&amp;info));</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> printf (<span class='string_literal'>" cond: %s\n"</span>, weather_info_get_conditions (&amp;info));</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> printf (<span class='string_literal'>" temp: %s\n"</span>, weather_info_get_temp (&amp;info));</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> printf (<span class='string_literal'>" dewp: %s\n"</span>, weather_info_get_dew (&amp;info));</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> printf (<span class='string_literal'>" wind: %s\n"</span>, weather_info_get_wind (&amp;info));</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> printf (<span class='string_literal'>" pressure: %s\n"</span>, weather_info_get_pressure (&amp;info));</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> printf (<span class='string_literal'>" vis: %s\n"</span>, weather_info_get_visibility (&amp;info));</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> <span class='comment'>// TODO: retrieve location's lat/lon to display sunrise/set times</span></td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> <span class='keyword'>return</span> <span class="mrange">0</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:12ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">8</div></td><td><div class="PathNav"><a href="#Path7" title="Previous event (7)">&#x2190;</a></div></td><td>Opened file is never closed; potential resource leak</td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/[email protected]_master/report-7ad762.html b/[email protected]_master/report-7ad762.html
new file mode 100644
index 0000000..893e8ba
--- /dev/null
+++ b/[email protected]_master/report-7ad762.html
@@ -0,0 +1,705 @@
+<!doctype html>
+<html>
+<head>
+<title>weather-sun.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'obsLat' during its initialization is never read -->
+
+<!-- BUGTYPE Dead initialization -->
+
+<!-- BUGCATEGORY Dead store -->
+
+<!-- BUGFILE /rootdir/libmateweather/weather-sun.c -->
+
+<!-- FILENAME weather-sun.c -->
+
+<!-- FUNCTIONNAME calc_sun2 -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 339c98a3d625369d3fd9c005bf20c8aa -->
+
+<!-- BUGLINE 164 -->
+
+<!-- BUGCOLUMN 13 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>weather-sun.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 164, column 13</a><br />Value stored to 'obsLat' during its initialization is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name weather-sun.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/11.0.0 -D HAVE_CONFIG_H -I . -I .. -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I .. -I . -I /usr/include/libxml2 -I /usr/include/libsoup-2.4 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/libxml2 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -D G_LOG_DOMAIN="MateWeather" -D MATELOCALEDIR="/usr/local/share/locale" -D MATEWEATHER_XML_LOCATION_DIR="/usr/local/share/libmateweather" -D PIC -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/11.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-sign-compare -fdebug-compilation-dir /rootdir/libmateweather -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2020-11-18-212044-5793-1 -x c weather-sun.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"164": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "S") {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].checked = !checked;
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+</form>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ s.classList.remove("selected");
+ });
+ el.classList.add("selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+}
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "j") {
+ navigateTo(/*up=*/false);
+ } else if (event.key == "k") {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"><span class='comment'>/* weather-sun.c - Astronomy calculations for mateweather</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* along with this program; if not, see</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* &lt;http://www.gnu.org/licenses/&gt;.</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* Formulas from:</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* "Practical Astronomy With Your Calculator" (3e), Peter Duffett-Smith</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>* Cambridge University Press 1988</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>* Unless otherwise noted, comments referencing "steps" are related to</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>* the algorithm presented in section 49 of above</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_CONFIG_H<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;config.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;math.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;time.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "weather-priv.h"</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#define <span class='macro'>ECCENTRICITY(d)<span class='macro_popup'>(0.01671123 - (d)/36525.*0.00004392)</span></span> (0.01671123 - (d)/36525.*0.00004392)</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='comment'>* Ecliptic longitude of the sun at specified time (UT)</span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='comment'>* The algoithm is described in section 47 of Duffett-Smith</span></td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='comment'>* Return value is in radians</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line">gdouble</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line">sunEclipLongitude(time_t t)</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> gdouble ndays, meanAnom, eccenAnom, delta, e, longitude;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='comment'>* Start with an estimate based on a fixed daily rate</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> ndays = <span class='macro'>EPOCH_TO_J2000(t)<span class='macro_popup'>((gdouble)(t)-946727935.816)</span></span> / 86400.;</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> meanAnom = <span class='macro'>DEGREES_TO_RADIANS(MEAN_ECLIPTIC_LONGITUDE(ndays)<span class='macro_popup'>((fmod (((280.46457166 + (ndays)/36525.*35999.37244981) - (282.93768193<br> + (ndays)/36525.*0.32327364)),360.) / 180.) * 3.14159265358979323846<br>)</span></span></td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> <span class='macro'>- PERIGEE_LONGITUDE(ndays))<span class='macro_popup'>((fmod (((280.46457166 + (ndays)/36525.*35999.37244981) - (282.93768193<br> + (ndays)/36525.*0.32327364)),360.) / 180.) * 3.14159265358979323846<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> <span class='comment'>* Approximate solution of Kepler's equation:</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> <span class='comment'>* Find E which satisfies E - e sin(E) = M (mean anomaly)</span></td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> eccenAnom = meanAnom;</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> e = <span class='macro'>ECCENTRICITY(ndays)<span class='macro_popup'>(0.01671123 - (ndays)/36525.*0.00004392)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='keyword'>while</span> (1e-12 &lt; fabs( delta = eccenAnom - e * sin(eccenAnom) - meanAnom))</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> eccenAnom -= delta / (1.- e * cos(eccenAnom));</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='comment'>* Earth's longitude on the ecliptic</span></td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> longitude = fmod( <span class='macro'>DEGREES_TO_RADIANS (PERIGEE_LONGITUDE(ndays))<span class='macro_popup'>((fmod (((282.93768193 + (ndays)/36525.*0.32327364)),360.) / 180.<br>) * 3.14159265358979323846)</span></span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> + 2. * atan (sqrt ((1.+e)/(1.-e))</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> * tan (eccenAnom / 2.)),</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> 2. * <span class='macro'>M_PI<span class='macro_popup'>3.14159265358979323846</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>if</span> (longitude &lt; 0.) {</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> longitude += 2 * <span class='macro'>M_PI<span class='macro_popup'>3.14159265358979323846</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> <span class='keyword'>return</span> longitude;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"><span class='keyword'>static</span> gdouble</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line">ecliptic_obliquity (gdouble time)</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> gdouble jc = <span class='macro'>EPOCH_TO_J2000 (time)<span class='macro_popup'>((gdouble)(time)-946727935.816)</span></span> / (36525. * 86400.);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> gdouble eclip_secs = (84381.448</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> - (46.84024 * jc)</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> - (59.e-5 * jc * jc)</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> + (1.813e-3 * jc * jc * jc));</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>DEGREES_TO_RADIANS(eclip_secs / 3600.)<span class='macro_popup'>((fmod ((eclip_secs / 3600.),360.) / 180.) * 3.14159265358979323846<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='comment'>* Convert ecliptic longitude and latitude (radians) to equitorial</span></td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='comment'>* coordinates, expressed as right ascension (hours) and</span></td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> <span class='comment'>* declination (radians)</span></td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line">ecl2equ (gdouble time,</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> gdouble eclipLon, gdouble eclipLat,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> gdouble *ra, gdouble *decl)</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gdouble mEclipObliq = ecliptic_obliquity(time);</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='keyword'>if</span> (ra) {</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> *ra = <span class='macro'>RADIANS_TO_HOURS (atan2 ((sin (eclipLon) * cos (mEclipObliq)<span class='macro_popup'>((atan2 ((sin (eclipLon) * cos (mEclipObliq) - tan (eclipLat)<br> * sin(mEclipObliq)), cos (eclipLon))) * 12. / 3.14159265358979323846<br>)</span></span></td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> <span class='macro'>- tan (eclipLat) * sin(mEclipObliq)),<span class='macro_popup'>((atan2 ((sin (eclipLon) * cos (mEclipObliq) - tan (eclipLat)<br> * sin(mEclipObliq)), cos (eclipLon))) * 12. / 3.14159265358979323846<br>)</span></span></td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='macro'>cos (eclipLon)))<span class='macro_popup'>((atan2 ((sin (eclipLon) * cos (mEclipObliq) - tan (eclipLat)<br> * sin(mEclipObliq)), cos (eclipLon))) * 12. / 3.14159265358979323846<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>if</span> (*ra &lt; 0.)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> *ra += 24.;</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>if</span> (decl) {</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> *decl = asin (( sin (eclipLat) * cos (mEclipObliq))</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> + cos (eclipLat) * sin (mEclipObliq) * sin(eclipLon));</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> <span class='comment'>* Calculate rising and setting times for an object</span></td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='comment'>* based on it equitorial coordinates (section 33 &amp; 15)</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='comment'>* Returned "rise" and "set" values are sideral times in hours</span></td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">gstObsv (gdouble ra, gdouble decl,</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> gdouble obsLat, gdouble obsLon,</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> gdouble *rise, gdouble *set)</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>double</span> a = acos (-tan (obsLat) * tan (decl));</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>double</span> b;</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>isnan (a)<span class='macro_popup'>__builtin_isnan (a)</span></span> != 0) {</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> *set = *rise = a;</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> a = <span class='macro'>RADIANS_TO_HOURS (a)<span class='macro_popup'>((a) * 12. / 3.14159265358979323846)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> b = 24. - a + ra;</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> a += ra;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> a -= <span class='macro'>RADIANS_TO_HOURS (obsLon)<span class='macro_popup'>((obsLon) * 12. / 3.14159265358979323846)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> b -= <span class='macro'>RADIANS_TO_HOURS (obsLon)<span class='macro_popup'>((obsLon) * 12. / 3.14159265358979323846)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> <span class='keyword'>if</span> ((a = fmod (a, 24.)) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> a += 24.;</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> ((b = fmod (b, 24.)) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> b += 24.;</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> *set = a;</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> *rise = b;</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"><span class='keyword'>static</span> gdouble</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">t0 (time_t date)</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> gdouble t = ((gdouble)(<span class='macro'>EPOCH_TO_J2000 (date)<span class='macro_popup'>((gdouble)(date)-946727935.816)</span></span> / 86400)) / 36525.0;</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> gdouble t0 = fmod (6.697374558 + 2400.051366 * t + 2.5862e-5 * t * t, 24.);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> <span class='keyword'>if</span> (t0 &lt; 0.)</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> t0 += 24.;</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> <span class='keyword'>return</span> t0;</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line">calc_sun2 (WeatherInfo *info, time_t t)</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> gdouble <span class="mrange">obsLat</span> = <span class="mrange">info-&gt;location-&gt;latitude</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:13ex">Value stored to 'obsLat' during its initialization is never read</div></td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> gdouble obsLon = info-&gt;location-&gt;longitude;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> time_t gm_midn;</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> time_t lcl_midn;</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> gdouble gm_hoff, lambda;</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> gdouble ra1, ra2;</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gdouble decl1, decl2;</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gdouble decl_midn, decl_noon;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> gdouble rise1, rise2;</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> gdouble set1, set2;</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> gdouble tt, t00;</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> gdouble x, u, dt;</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> <span class='comment'>/* Approximate preceding local midnight at observer's longitude */</span></td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> obsLat = info-&gt;location-&gt;latitude;</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> obsLon = info-&gt;location-&gt;longitude;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> gm_midn = t - (t % 86400);</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> gm_hoff = floor ((<span class='macro'>RADIANS_TO_DEGREES (obsLon)<span class='macro_popup'>((obsLon) * 180. / 3.14159265358979323846)</span></span> + 7.5) / 15.);</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> lcl_midn = gm_midn - 3600. * gm_hoff;</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='keyword'>if</span> (t - lcl_midn &gt;= 86400)</td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> lcl_midn += 86400;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (lcl_midn &gt; t)</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> lcl_midn -= 86400;</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> lambda = sunEclipLongitude (lcl_midn);</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> <span class='comment'>* Calculate equitorial coordinates of sun at previous</span></td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> <span class='comment'>* and next local midnights</span></td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> ecl2equ (lcl_midn, lambda, 0., &amp;ra1, &amp;decl1);</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> ecl2equ (lcl_midn + 86400.,</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> lambda + <span class='macro'>DEGREES_TO_RADIANS(SOL_PROGRESSION)<span class='macro_popup'>((fmod (((360./365.242191)),360.) / 180.) * 3.14159265358979323846<br>)</span></span>, 0.,</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> &amp;ra2, &amp;decl2);</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='comment'>* If the observer is within the Arctic or Antarctic Circles then</span></td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='comment'>* the sun may be above or below the horizon for the full day.</span></td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> decl_midn = <span class='macro'>MIN(decl1,decl2)<span class='macro_popup'>(((decl1) &lt; (decl2)) ? (decl1) : (decl2))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> decl_noon = (decl1+decl2)/2.;</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> info-&gt;midnightSun =</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> (obsLat &gt; (<span class='macro'>M_PI<span class='macro_popup'>3.14159265358979323846</span></span>/2.-decl_midn)) || (obsLat &lt; (-<span class='macro'>M_PI<span class='macro_popup'>3.14159265358979323846</span></span>/2.-decl_midn));</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> info-&gt;polarNight =</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> (obsLat &gt; (<span class='macro'>M_PI<span class='macro_popup'>3.14159265358979323846</span></span>/2.+decl_noon)) || (obsLat &lt; (-<span class='macro'>M_PI<span class='macro_popup'>3.14159265358979323846</span></span>/2.+decl_noon));</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> <span class='keyword'>if</span> (info-&gt;midnightSun || info-&gt;polarNight) {</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> info-&gt;sunriseValid = info-&gt;sunsetValid = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> <span class='comment'>* Convert to rise and set times based positions for the preceding</span></td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> <span class='comment'>* and following local midnights.</span></td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> gstObsv (ra1, decl1, obsLat, obsLon - (gm_hoff * <span class='macro'>M_PI<span class='macro_popup'>3.14159265358979323846</span></span> / 12.), &amp;rise1, &amp;set1);</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gstObsv (ra2, decl2, obsLat, obsLon - (gm_hoff * <span class='macro'>M_PI<span class='macro_popup'>3.14159265358979323846</span></span> / 12.), &amp;rise2, &amp;set2);</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> <span class='comment'>/* TODO: include calculations for regions near the poles. */</span></td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>isnan(rise1)<span class='macro_popup'>__builtin_isnan (rise1)</span></span> || <span class='macro'>isnan(rise2)<span class='macro_popup'>__builtin_isnan (rise2)</span></span>) {</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> info-&gt;sunriseValid = info-&gt;sunsetValid = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> <span class='keyword'>if</span> (rise2 &lt; rise1) {</td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> rise2 += 24.;</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> <span class='keyword'>if</span> (set2 &lt; set1) {</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> set2 += 24.;</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> tt = t0(lcl_midn);</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> t00 = tt - (gm_hoff + <span class='macro'>RADIANS_TO_HOURS(obsLon)<span class='macro_popup'>((obsLon) * 12. / 3.14159265358979323846)</span></span>) * 1.002737909;</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='keyword'>if</span> (t00 &lt; 0.)</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> t00 += 24.;</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> <span class='keyword'>if</span> (rise1 &lt; t00) {</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> rise1 += 24.;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> rise2 += 24.;</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (set1 &lt; t00) {</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> set1 += 24.;</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> set2 += 24.;</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='comment'>* Interpolate between the two to get a rise and set time</span></td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> <span class='comment'>* based on the sun's position at local noon (step 8)</span></td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> rise1 = (24.07 * rise1 - t00 * (rise2 - rise1)) / (24.07 + rise1 - rise2);</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> set1 = (24.07 * set1 - t00 * (set2 - set1)) / (24.07 + set1 - set2);</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='comment'>* Calculate an adjustment value to account for parallax,</span></td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='comment'>* refraction and the Sun's finite diameter (steps 9,10)</span></td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> decl2 = (decl1 + decl2) / 2.;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> x = <span class='macro'>DEGREES_TO_RADIANS(0.830725)<span class='macro_popup'>((fmod ((0.830725),360.) / 180.) * 3.14159265358979323846)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> u = acos ( sin(obsLat) / cos(decl2) );</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> dt = <span class='macro'>RADIANS_TO_HOURS ( asin ( sin(x) / sin(u) ) / cos(decl2) )<span class='macro_popup'>((asin ( sin(x) / sin(u) ) / cos(decl2)) * 12. / 3.14159265358979323846<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>* Subtract the correction value from sunrise and add to sunset,</span></td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='comment'>* then (step 11) convert sideral times to UT</span></td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> rise1 = (rise1 - dt - tt) * 0.9972695661;</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> <span class='keyword'>if</span> (rise1 &lt; 0.)</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> rise1 += 24;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (rise1 &gt;= 24.)</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> rise1 -= 24.;</td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> info-&gt;sunriseValid = ((rise1 &gt;= 0.) &amp;&amp; (rise1 &lt; 24.));</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> info-&gt;sunrise = (rise1 * 3600.) + lcl_midn;</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> set1 = (set1 + dt - tt) * 0.9972695661;</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (set1 &lt; 0.)</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> set1 += 24;</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (set1 &gt;= 24.)</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> set1 -= 24.;</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> info-&gt;sunsetValid = ((set1 &gt;= 0.) &amp;&amp; (set1 &lt; 24.));</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> info-&gt;sunset = (set1 * 3600.) + lcl_midn;</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> <span class='keyword'>return</span> (info-&gt;sunriseValid || info-&gt;sunsetValid);</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"><span class='comment'>/**</span></td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> <span class='comment'>* calc_sun_time:</span></td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> <span class='comment'>* @info: #WeatherInfo structure containing the observer's latitude</span></td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> <span class='comment'>* and longitude in radians, fills in the sunrise and sunset times.</span></td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>* @t: time_t</span></td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='comment'>* Returns: gboolean indicating if the results are valid.</span></td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line">calc_sun_time (WeatherInfo *info, time_t t)</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> <span class='keyword'>return</span> info-&gt;location-&gt;latlon_valid &amp;&amp; calc_sun2 (info, t);</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"><span class='comment'>/**</span></td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> <span class='comment'>* calc_sun:</span></td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> <span class='comment'>* @info: #WeatherInfo structure containing the observer's latitude</span></td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='comment'>* and longitude in radians, fills in the sunrise and sunset times.</span></td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='comment'>* Returns: gboolean indicating if the results are valid.</span></td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line">calc_sun (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='keyword'>return</span> calc_sun_time(info, time(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>));</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"><span class='comment'>/**</span></td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> <span class='comment'>* weather_info_next_sun_event:</span></td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>* @info: #WeatherInfo structure</span></td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> <span class='comment'>* Returns: the interval, in seconds, until the next "sun event":</span></td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> <span class='comment'>* - local midnight, when rise and set times are recomputed</span></td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='comment'>* - next sunrise, when icon changes to daytime version</span></td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> <span class='comment'>* - next sunset, when icon changes to nighttime version</span></td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">gint</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line">weather_info_next_sun_event (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> time_t now = time (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='keyword'>struct</span> tm ltm;</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> time_t nxtEvent;</td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> <span class='macro'>g_return_val_if_fail (info != NULL, -1)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (info != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_<br> = 0; _g_boolean_var_; }), 1))) { } else { g_return_if_fail_warning<br> ("MateWeather", ((const char*) (__func__)), "info != NULL");<br> return (-1); } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> <span class='keyword'>if</span> (!calc_sun (info))</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> <span class='keyword'>return</span> -1;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> <span class='comment'>/* Determine when the next local midnight occurs */</span></td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> (<span class='keyword'>void</span>) localtime_r (&amp;now, &amp;ltm);</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> ltm.tm_sec = 0;</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> ltm.tm_min = 0;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> ltm.tm_hour = 0;</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> ltm.tm_mday++;</td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> nxtEvent = mktime (&amp;ltm);</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='keyword'>if</span> (info-&gt;sunsetValid &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> (info-&gt;sunset &gt; now) &amp;&amp; (info-&gt;sunset &lt; nxtEvent))</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> nxtEvent = info-&gt;sunset;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> <span class='keyword'>if</span> (info-&gt;sunriseValid &amp;&amp;</td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> (info-&gt;sunrise &gt; now) &amp;&amp; (info-&gt;sunrise &lt; nxtEvent))</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> nxtEvent = info-&gt;sunrise;</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='keyword'>return</span> (gint)(nxtEvent - now);</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/[email protected]_master/report-7f5d92.html b/[email protected]_master/report-7f5d92.html
new file mode 100644
index 0000000..a280285
--- /dev/null
+++ b/[email protected]_master/report-7f5d92.html
@@ -0,0 +1,917 @@
+<!doctype html>
+<html>
+<head>
+<title>weather-metar.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC This statement is never executed -->
+
+<!-- BUGTYPE Unreachable code -->
+
+<!-- BUGCATEGORY Dead code -->
+
+<!-- BUGFILE /rootdir/libmateweather/weather-metar.c -->
+
+<!-- FILENAME weather-metar.c -->
+
+<!-- FUNCTIONNAME metar_tok_vis -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 54e1e1a0afeccd04162c41a01d40e8bb -->
+
+<!-- BUGLINE 177 -->
+
+<!-- BUGCOLUMN 28 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>weather-metar.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 177, column 28</a><br />This statement is never executed</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name weather-metar.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/11.0.0 -D HAVE_CONFIG_H -I . -I .. -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I .. -I . -I /usr/include/libxml2 -I /usr/include/libsoup-2.4 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/libxml2 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -D G_LOG_DOMAIN="MateWeather" -D MATELOCALEDIR="/usr/local/share/locale" -D MATEWEATHER_XML_LOCATION_DIR="/usr/local/share/libmateweather" -D PIC -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/11.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-sign-compare -fdebug-compilation-dir /rootdir/libmateweather -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2020-11-18-212044-5793-1 -x c weather-metar.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"177": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "S") {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].checked = !checked;
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+</form>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ s.classList.remove("selected");
+ });
+ el.classList.add("selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+}
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "j") {
+ navigateTo(/*up=*/false);
+ } else if (event.key == "k") {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"><span class='comment'>/* weather-metar.c - Weather server functions (METAR)</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* along with this program; if not, see</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* &lt;http://www.gnu.org/licenses/&gt;.</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_CONFIG_H<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"><span class='directive'>#include &lt;config.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;regex.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include "weather.h"</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include "weather-priv.h"</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='keyword'>enum</span> {</td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> TIME_RE,</td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> WIND_RE,</td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> VIS_RE,</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> COND_RE,</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"> CLOUD_RE,</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> TEMP_RE,</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> PRES_RE,</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> RE_NUM</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/* Return time of weather report as secs since epoch UTC */</span></td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> time_t</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line">make_time (gint utcDate, gint utcHour, gint utcMin)</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>const</span> time_t now = time (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> <span class='keyword'>struct</span> tm tm;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> localtime_r (&amp;now, &amp;tm);</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> <span class='comment'>/* If last reading took place just before midnight UTC on the</span></td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> <span class='comment'>* first, adjust the date downward to allow for the month</span></td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> <span class='comment'>* change-over. This ASSUMES that the reading won't be more than</span></td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> <span class='comment'>* 24 hrs old! */</span></td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>if</span> ((utcDate &gt; tm.tm_mday) &amp;&amp; (tm.tm_mday == 1)) {</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> tm.tm_mday = 0; <span class='comment'>/* mktime knows this is the last day of the previous</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> <span class='comment'>* month. */</span></td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> tm.tm_mday = utcDate;</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> tm.tm_hour = utcHour;</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> tm.tm_min = utcMin;</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> tm.tm_sec = 0;</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='comment'>/* mktime() assumes value is local, not UTC. Use tm_gmtoff to compensate */</span></td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_TM_TM_GMOFF<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='keyword'>return</span> tm.tm_gmtoff + mktime (&amp;tm);</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"><span class='directive'>#elif defined HAVE_TIMEZONE</span></td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> <span class='keyword'>return</span> timezone + mktime (&amp;tm);</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line">metar_tok_time (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> gint day, hr, min;</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> sscanf (tokp, <span class='string_literal'>"%2u%2u%2u"</span>, &amp;day, &amp;hr, &amp;min);</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> info-&gt;update = make_time (day, hr, min);</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line">metar_tok_wind (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> gchar sdir[4], sspd[4], sgust[4];</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> gint dir, spd = -1;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> gchar *gustp;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> size_t glen;</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> strncpy (sdir, tokp, 3);</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> sdir[3] = 0;</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> dir = (!strcmp (sdir, <span class='string_literal'>"VRB"</span>)) ? -1 : atoi (sdir);</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> memset (sspd, 0, <span class='keyword'>sizeof</span> (sspd));</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> glen = strspn (tokp + 3, <span class='macro'>CONST_DIGITS<span class='macro_popup'>"0123456789"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> strncpy (sspd, tokp + 3, glen);</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> spd = atoi (sspd);</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> tokp += glen + 3;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gustp = strchr (tokp, 'G');</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> <span class='keyword'>if</span> (gustp) {</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> memset (sgust, 0, <span class='keyword'>sizeof</span> (sgust));</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> glen = strspn (gustp + 1, <span class='macro'>CONST_DIGITS<span class='macro_popup'>"0123456789"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> strncpy (sgust, gustp + 1, glen);</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> tokp = gustp + 1 + glen;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>if</span> (!strcmp (tokp, <span class='string_literal'>"MPS"</span>))</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> info-&gt;windspeed = <span class='macro'>WINDSPEED_MS_TO_KNOTS ((WeatherWindSpeed)spd)<span class='macro_popup'>(((WeatherWindSpeed)spd) / 0.514444)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> info-&gt;windspeed = (WeatherWindSpeed)spd;</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='keyword'>if</span> ((349 &lt;= dir) || (dir &lt;= 11))</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> info-&gt;wind = WIND_N;</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((12 &lt;= dir) &amp;&amp; (dir &lt;= 33))</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> info-&gt;wind = WIND_NNE;</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((34 &lt;= dir) &amp;&amp; (dir &lt;= 56))</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> info-&gt;wind = WIND_NE;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((57 &lt;= dir) &amp;&amp; (dir &lt;= 78))</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> info-&gt;wind = WIND_ENE;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((79 &lt;= dir) &amp;&amp; (dir &lt;= 101))</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> info-&gt;wind = WIND_E;</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((102 &lt;= dir) &amp;&amp; (dir &lt;= 123))</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> info-&gt;wind = WIND_ESE;</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((124 &lt;= dir) &amp;&amp; (dir &lt;= 146))</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> info-&gt;wind = WIND_SE;</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((147 &lt;= dir) &amp;&amp; (dir &lt;= 168))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> info-&gt;wind = WIND_SSE;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((169 &lt;= dir) &amp;&amp; (dir &lt;= 191))</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> info-&gt;wind = WIND_S;</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((192 &lt;= dir) &amp;&amp; (dir &lt;= 213))</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> info-&gt;wind = WIND_SSW;</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((214 &lt;= dir) &amp;&amp; (dir &lt;= 236))</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> info-&gt;wind = WIND_SW;</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((237 &lt;= dir) &amp;&amp; (dir &lt;= 258))</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> info-&gt;wind = WIND_WSW;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((259 &lt;= dir) &amp;&amp; (dir &lt;= 281))</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> info-&gt;wind = WIND_W;</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((282 &lt;= dir) &amp;&amp; (dir &lt;= 303))</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> info-&gt;wind = WIND_WNW;</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((304 &lt;= dir) &amp;&amp; (dir &lt;= 326))</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> info-&gt;wind = WIND_NW;</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> ((327 &lt;= dir) &amp;&amp; (dir &lt;= 348))</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> info-&gt;wind = WIND_NNW;</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line">metar_tok_vis (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> gchar *pfrac, *pend, *psp;</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> gchar sval[6];</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> gint num, den, val;</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> memset (sval, 0, <span class='keyword'>sizeof</span> (sval));</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (!strcmp (tokp,<span class='string_literal'>"CAVOK"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>// "Ceiling And Visibility OK": visibility &gt;= 10 KM</span></td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> info-&gt;visibility=10000. / <span class='macro'>VISIBILITY_SM_TO_M (1.)<span class='macro_popup'>(((1.) * 1.609344) * 1000)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> info-&gt;sky = SKY_CLEAR;</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (0 != (pend = strstr (tokp, <span class='string_literal'>"SM"</span>))) {</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>// US observation: field ends with "SM"</span></td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> pfrac = strchr (tokp, '/');</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>if</span> (pfrac) {</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> <span class='keyword'>if</span> (*tokp == 'M') {</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> info-&gt;visibility = 0.001;</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> num = (*(pfrac - 1) - '0');</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> strncpy (sval, pfrac + 1, pend - pfrac - 1);</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> den = atoi (sval);</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> info-&gt;visibility =</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> ((WeatherVisibility)num / ((WeatherVisibility)den));</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> psp = strchr (tokp, ' ');</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='keyword'>if</span> (psp) {</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> *psp = <span class="mrange">'\0';</td></tr></span>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:28ex">This statement is never executed</div></td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> val = atoi (tokp);</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> info-&gt;visibility += (WeatherVisibility)val;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> strncpy (sval, tokp, pend - tokp);</td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> val = atoi (sval);</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> info-&gt;visibility = (WeatherVisibility)val;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='comment'>// International observation: NNNN(DD NNNNDD)?</span></td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='comment'>// For now: use only the minimum visibility and ignore its direction</span></td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> strncpy (sval, tokp, strspn (tokp, <span class='macro'>CONST_DIGITS<span class='macro_popup'>"0123456789"</span></span>));</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> val = atoi (sval);</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> info-&gt;visibility = (WeatherVisibility)val / <span class='macro'>VISIBILITY_SM_TO_M (1.)<span class='macro_popup'>(((1.) * 1.609344) * 1000)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line">metar_tok_cloud (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> gchar stype[4], salt[4];</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> strncpy (stype, tokp, 3);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> stype[3] = 0;</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> <span class='keyword'>if</span> (strlen (tokp) == 6) {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> strncpy (salt, tokp + 3, 3);</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> salt[3] = 0;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"CLR"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> info-&gt;sky = SKY_CLEAR;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"SKC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> info-&gt;sky = SKY_CLEAR;</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"NSC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> info-&gt;sky = SKY_CLEAR;</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"BKN"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> info-&gt;sky = SKY_BROKEN;</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"SCT"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> info-&gt;sky = SKY_SCATTERED;</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"FEW"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> info-&gt;sky = SKY_FEW;</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (stype, <span class='string_literal'>"OVC"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> info-&gt;sky = SKY_OVERCAST;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line">metar_tok_pres (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> <span class='keyword'>if</span> (*tokp == 'A') {</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> gchar sintg[3], sfract[3];</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> gint intg, fract;</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> strncpy (sintg, tokp + 1, 2);</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> sintg[2] = 0;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> intg = atoi (sintg);</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> strncpy (sfract, tokp + 3, 2);</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> sfract[2] = 0;</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> fract = atoi (sfract);</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> info-&gt;pressure = (WeatherPressure)intg + (((WeatherPressure)fract)/100.0);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> } <span class='keyword'>else</span> { <span class='comment'>/* *tokp == 'Q' */</span></td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> gchar spres[5];</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> gint pres;</td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> strncpy (spres, tokp + 1, 4);</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> spres[4] = 0;</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> pres = atoi (spres);</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> info-&gt;pressure = <span class='macro'>PRESSURE_MBAR_TO_INCH ((WeatherPressure)pres)<span class='macro_popup'>(((WeatherPressure)pres) * 0.029533373)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line">metar_tok_temp (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> gchar *ptemp, *pdew, *psep;</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> psep = strchr (tokp, '/');</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> *psep = 0;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> ptemp = tokp;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> pdew = psep + 1;</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> info-&gt;temp = (*ptemp == 'M') ? <span class='macro'>TEMP_C_TO_F (-atoi (ptemp + 1))<span class='macro_popup'>(((-atoi (ptemp + 1)) * (9.0/5.0)) + 32.0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> : <span class='macro'>TEMP_C_TO_F (atoi (ptemp))<span class='macro_popup'>(((atoi (ptemp)) * (9.0/5.0)) + 32.0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> <span class='keyword'>if</span> (*pdew) {</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> info-&gt;dew = (*pdew == 'M') ? <span class='macro'>TEMP_C_TO_F (-atoi (pdew + 1))<span class='macro_popup'>(((-atoi (pdew + 1)) * (9.0/5.0)) + 32.0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> : <span class='macro'>TEMP_C_TO_F (atoi (pdew))<span class='macro_popup'>(((atoi (pdew)) * (9.0/5.0)) + 32.0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> info-&gt;dew = -1000.0;</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line">metar_tok_cond (gchar *tokp, WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> gchar squal[3], sphen[4];</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> gchar *pphen;</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>if</span> ((strlen (tokp) &gt; 3) &amp;&amp; ((*tokp == '+') || (*tokp == '-')))</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> ++tokp; <span class='comment'>/* FIX */</span></td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> <span class='keyword'>if</span> ((*tokp == '+') || (*tokp == '-'))</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> pphen = tokp + 1;</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strlen (tokp) &lt; 4)</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> pphen = tokp;</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> pphen = tokp + 2;</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> memset (squal, 0, <span class='keyword'>sizeof</span> (squal));</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> strncpy (squal, tokp, pphen - tokp);</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> squal[pphen - tokp] = 0;</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> memset (sphen, 0, <span class='keyword'>sizeof</span> (sphen));</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> strncpy (sphen, pphen, <span class='keyword'>sizeof</span> (sphen));</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> sphen[<span class='keyword'>sizeof</span> (sphen)-1] = '\0';</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='comment'>/* Defaults */</span></td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_NONE;</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> info-&gt;cond.phenomenon = PHENOMENON_NONE;</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> info-&gt;cond.significant = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>""</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_MODERATE;</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"-"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_LIGHT;</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"+"</span>)) {</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> info-&gt;cond.qualifier = QUALIFIER_HEAVY;</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span> (!strcmp (squal, <span class='string_literal'>"VC"</span>)) {</td></tr>
+<