summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--[email protected]_v1.25.0/index.html131
-rw-r--r--[email protected]_v1.25.0/report-077608.html552
-rw-r--r--[email protected]_v1.25.0/report-6df16c.html920
-rw-r--r--[email protected]_v1.25.0/report-9184c4.html912
-rw-r--r--[email protected]_v1.25.0/report-919fee.html2025
-rw-r--r--[email protected]_v1.25.0/report-96ead2.html428
-rw-r--r--[email protected]_v1.25.0/report-9cfd7e.html700
-rw-r--r--[email protected]_v1.25.0/report-a5f2d5.html912
-rw-r--r--[email protected]_v1.25.0/report-a7fe6c.html2025
-rw-r--r--[email protected]_v1.25.0/report-c0e04f.html700
-rw-r--r--[email protected]_v1.25.0/report-d10486.html700
-rw-r--r--[email protected]_v1.25.0/scanview.css62
-rw-r--r--[email protected]_v1.25.0/sorttable.js492
-rw-r--r--[email protected]_v1.25.0/0.html1352
-rw-r--r--[email protected]_v1.25.0/1.html976
-rw-r--r--[email protected]_v1.25.0/10.html368
-rw-r--r--[email protected]_v1.25.0/11.html3546
-rw-r--r--[email protected]_v1.25.0/2.html692
-rw-r--r--[email protected]_v1.25.0/3.html314
-rw-r--r--[email protected]_v1.25.0/4.html334
-rw-r--r--[email protected]_v1.25.0/5.html320
-rw-r--r--[email protected]_v1.25.0/6.html1106
-rw-r--r--[email protected]_v1.25.0/7.html512
-rw-r--r--[email protected]_v1.25.0/8.html1308
-rw-r--r--[email protected]_v1.25.0/9.html860
-rw-r--r--[email protected]_v1.25.0/index.html148
-rw-r--r--[email protected]_v1.25.0/stats.html103
-rw-r--r--[email protected]_v1.25.0/style.css149
-rw-r--r--[email protected]_master/index.html131
-rw-r--r--[email protected]_master/report-0cb58d.html912
-rw-r--r--[email protected]_master/report-1b5152.html700
-rw-r--r--[email protected]_master/report-525855.html912
-rw-r--r--[email protected]_master/report-57df0f.html2025
-rw-r--r--[email protected]_master/report-86767f.html700
-rw-r--r--[email protected]_master/report-a0d144.html920
-rw-r--r--[email protected]_master/report-a14731.html552
-rw-r--r--[email protected]_master/report-baab18.html2025
-rw-r--r--[email protected]_master/report-e5cfcb.html700
-rw-r--r--[email protected]_master/report-f10a91.html428
-rw-r--r--[email protected]_master/scanview.css62
-rw-r--r--[email protected]_master/sorttable.js492
-rw-r--r--[email protected]_master/0.html1352
-rw-r--r--[email protected]_master/1.html976
-rw-r--r--[email protected]_master/10.html368
-rw-r--r--[email protected]_master/11.html3546
-rw-r--r--[email protected]_master/2.html692
-rw-r--r--[email protected]_master/3.html314
-rw-r--r--[email protected]_master/4.html334
-rw-r--r--[email protected]_master/5.html320
-rw-r--r--[email protected]_master/6.html1106
-rw-r--r--[email protected]_master/7.html512
-rw-r--r--[email protected]_master/8.html1308
-rw-r--r--[email protected]_master/9.html860
-rw-r--r--[email protected]_master/index.html148
-rw-r--r--[email protected]_master/stats.html103
-rw-r--r--[email protected]_master/style.css149
-rw-r--r--[email protected]_extract-xsl/index.html131
-rw-r--r--[email protected]_extract-xsl/report-18645b.html700
-rw-r--r--[email protected]_extract-xsl/report-18d56d.html428
-rw-r--r--[email protected]_extract-xsl/report-1b8d21.html700
-rw-r--r--[email protected]_extract-xsl/report-27f82d.html920
-rw-r--r--[email protected]_extract-xsl/report-4d345e.html552
-rw-r--r--[email protected]_extract-xsl/report-7653f9.html912
-rw-r--r--[email protected]_extract-xsl/report-97b0b5.html2025
-rw-r--r--[email protected]_extract-xsl/report-a71288.html912
-rw-r--r--[email protected]_extract-xsl/report-d04818.html2025
-rw-r--r--[email protected]_extract-xsl/report-ddd41a.html700
-rw-r--r--[email protected]_extract-xsl/scanview.css62
-rw-r--r--[email protected]_extract-xsl/sorttable.js492
-rw-r--r--[email protected]_extract-xsl/0.html1352
-rw-r--r--[email protected]_extract-xsl/1.html976
-rw-r--r--[email protected]_extract-xsl/10.html368
-rw-r--r--[email protected]_extract-xsl/11.html3546
-rw-r--r--[email protected]_extract-xsl/2.html692
-rw-r--r--[email protected]_extract-xsl/3.html314
-rw-r--r--[email protected]_extract-xsl/4.html334
-rw-r--r--[email protected]_extract-xsl/5.html320
-rw-r--r--[email protected]_extract-xsl/6.html1106
-rw-r--r--[email protected]_extract-xsl/7.html512
-rw-r--r--[email protected]_extract-xsl/8.html1308
-rw-r--r--[email protected]_extract-xsl/9.html860
-rw-r--r--[email protected]_extract-xsl/index.html148
-rw-r--r--[email protected]_extract-xsl/stats.html103
-rw-r--r--[email protected]_extract-xsl/style.css149
-rw-r--r--[email protected]_master/index.html131
-rw-r--r--[email protected]_master/report-044eda.html2025
-rw-r--r--[email protected]_master/report-1ab0ce.html700
-rw-r--r--[email protected]_master/report-390df1.html428
-rw-r--r--[email protected]_master/report-6389af.html700
-rw-r--r--[email protected]_master/report-7efcfd.html2025
-rw-r--r--[email protected]_master/report-8d3335.html920
-rw-r--r--[email protected]_master/report-9b8882.html552
-rw-r--r--[email protected]_master/report-ac37b5.html912
-rw-r--r--[email protected]_master/report-c30f76.html700
-rw-r--r--[email protected]_master/report-fd7773.html912
-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.html167
-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-16bef6.html552
-rw-r--r--[email protected]_master/report-5ee04f.html428
-rw-r--r--[email protected]_master/report-6237e8.html2025
-rw-r--r--[email protected]_master/report-945e07.html700
-rw-r--r--[email protected]_master/report-b67884.html912
-rw-r--r--[email protected]_master/report-bdef10.html2025
-rw-r--r--[email protected]_master/report-c52891.html700
-rw-r--r--[email protected]_master/report-c5ea6f.html912
-rw-r--r--[email protected]_master/report-dce5bf.html920
-rw-r--r--[email protected]_master/report-e58b7c.html700
-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.html167
-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-1207d7.html912
-rw-r--r--[email protected]_master/report-20426a.html920
-rw-r--r--[email protected]_master/report-271da4.html912
-rw-r--r--[email protected]_master/report-54db50.html2025
-rw-r--r--[email protected]_master/report-7a2b15.html428
-rw-r--r--[email protected]_master/report-8fe0aa.html700
-rw-r--r--[email protected]_master/report-a49f6d.html700
-rw-r--r--[email protected]_master/report-adfa9d.html2025
-rw-r--r--[email protected]_master/report-c5c5c1.html700
-rw-r--r--[email protected]_master/report-c885d4.html552
-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.html167
-rw-r--r--[email protected]_master/stats.html119
-rw-r--r--[email protected]_master/style.css137
-rw-r--r--[email protected]_travis-update/index.html131
-rw-r--r--[email protected]_travis-update/report-0dc458.html2030
-rw-r--r--[email protected]_travis-update/report-269cd8.html705
-rw-r--r--[email protected]_travis-update/report-4e9a93.html433
-rw-r--r--[email protected]_travis-update/report-5ea364.html925
-rw-r--r--[email protected]_travis-update/report-67ca9d.html557
-rw-r--r--[email protected]_travis-update/report-948196.html705
-rw-r--r--[email protected]_travis-update/report-b254b5.html705
-rw-r--r--[email protected]_travis-update/report-b449e2.html2030
-rw-r--r--[email protected]_travis-update/report-ba0f4d.html917
-rw-r--r--[email protected]_travis-update/report-d5c600.html917
-rw-r--r--[email protected]_travis-update/scanview.css62
-rw-r--r--[email protected]_travis-update/sorttable.js492
-rw-r--r--[email protected]_travis-update/0.html1368
-rw-r--r--[email protected]_travis-update/1.html994
-rw-r--r--[email protected]_travis-update/10.html384
-rw-r--r--[email protected]_travis-update/11.html3562
-rw-r--r--[email protected]_travis-update/2.html708
-rw-r--r--[email protected]_travis-update/3.html330
-rw-r--r--[email protected]_travis-update/4.html350
-rw-r--r--[email protected]_travis-update/5.html336
-rw-r--r--[email protected]_travis-update/6.html1122
-rw-r--r--[email protected]_travis-update/7.html528
-rw-r--r--[email protected]_travis-update/8.html1324
-rw-r--r--[email protected]_travis-update/9.html876
-rw-r--r--[email protected]_travis-update/index.html165
-rw-r--r--[email protected]_travis-update/stats.html119
-rw-r--r--[email protected]_travis-update/style.css137
-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--2020-11[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, 228228 insertions, 0 deletions
diff --git a/[email protected]_v1.25.0/index.html b/[email protected]_v1.25.0/index.html
new file mode 100644
index 0000000..d4f9bb0
--- /dev/null
+++ b/[email protected]_v1.25.0/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 9.0.1 (Fedora 9.0.1-2.fc31)
+</td></tr>
+<tr><th>Date:</th><td>Wed Jun 24 14:39:59 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-9184c4.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-9184c4.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-a7fe6c.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-a7fe6c.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-9cfd7e.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-9cfd7e.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-d10486.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-d10486.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-077608.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-077608.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-6df16c.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-6df16c.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-919fee.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-919fee.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-96ead2.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-96ead2.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-a5f2d5.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-a5f2d5.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-c0e04f.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-c0e04f.html" -->
+</tr>
+</tbody>
+</table>
+
+</body></html>
diff --git a/[email protected]_v1.25.0/report-077608.html b/[email protected]_v1.25.0/report-077608.html
new file mode 100644
index 0000000..9d4d098
--- /dev/null
+++ b/[email protected]_v1.25.0/report-077608.html
@@ -0,0 +1,552 @@
+<!doctype html>
+<html>
+<head>
+<title>weather-met.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 Dereference of null pointer (loaded from variable 'o') -->
+
+<!-- BUGTYPE Dereference of null pointer -->
+
+<!-- BUGCATEGORY Logic error -->
+
+<!-- BUGFILE /rootdir/libmateweather/weather-met.c -->
+
+<!-- FILENAME weather-met.c -->
+
+<!-- FUNCTIONNAME met_reprocess -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 20fe9d2eaa69b09c60780bdfc3f8a920 -->
+
+<!-- BUGLINE 111 -->
+
+<!-- BUGCOLUMN 8 -->
+
+<!-- BUGPATHLENGTH 27 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>weather-met.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 111, column 8</a><br />Dereference of null pointer (loaded from variable 'o')</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 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name weather-met.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 -mrelocation-model pic -pic-level 2 -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -momit-leaf-frame-pointer -resource-dir /usr/lib64/clang/9.0.1 -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/fribidi -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gio-unix-2.0 -I /usr/include/libdrm -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/9.0.1/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 -fmessage-length 0 -fobjc-runtime=gcc -fdiagnostics-show-option -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-06-24-143959-5644-1 -x c weather-met.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": {"31": 1, "32": 1, "33": 1, "34": 1, "35": 1, "36": 1, "37": 1, "38": 1, "39": 1, "40": 1, "42": 1, "50": 1, "51": 1, "53": 1, "111": 1, "122": 1, "123": 1, "124": 1, "125": 1, "126": 1, "127": 1, "128": 1, "130": 1, "132": 1, "133": 1, "135": 1, "136": 1, "138": 1, "140": 1, "146": 1, "147": 1, "148": 1, "149": 1, "151": 1, "153": 1, "160": 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]+");
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelectorAll(".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) {
+ document.querySelectorAll(".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-met.c - UK Met Office forecast source</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;ctype.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;string.h&gt;</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'>#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include "weather.h"</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include "weather-priv.h"</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='keyword'>static</span> <span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line">met_reprocess (<span class='keyword'>char</span> *x, <span class='keyword'>int</span> len)</td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> <span class='keyword'>char</span> *p = x;</td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> <span class='keyword'>char</span> *o;</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> <span class='keyword'>int</span> spacing = 0;</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"> <span class="mrange"><span class='keyword'>static</span> gchar *buf</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path22" class="msg msgEvent" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">22</div></td><td><div class="PathNav"><a href="#Path21" title="Previous event (21)">&#x2190;</a></div></td></td><td>'buf' initialized to a null pointer value</td><td><div class="PathNav"><a href="#Path23" title="Next event (23)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> <span class='keyword'>static</span> gint buflen = 0;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> gchar *lastspace = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>int</span> count = 0;</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </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">buflen &lt; len</span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path23" class="msg msgEvent" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">23</div></td><td><div class="PathNav"><a href="#Path22" title="Previous event (22)">&#x2190;</a></div></td></td><td>Assuming 'buflen' is &gt;= 'len'</td><td><div class="PathNav"><a href="#Path24" title="Next event (24)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path24" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">24</div></td><td><div class="PathNav"><a href="#Path23" title="Previous event (23)">&#x2190;</a></div></td></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path25" title="Next event (25)">&#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"> {</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> <span class='keyword'>if</span> (buf)</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> g_free (buf);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> buf = g_malloc (len + 1);</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> buflen = len;</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="mrange">o = buf</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path25" class="msg msgEvent" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">25</div></td><td><div class="PathNav"><a href="#Path24" title="Previous event (24)">&#x2190;</a></div></td></td><td>Null pointer value stored to 'o'</td><td><div class="PathNav"><a href="#Path26" title="Next event (26)">&#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"> x += len; <span class='comment'>/* End mark */</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"> <span class='keyword'>while</span> (<span class="mrange">*p</span> &amp;&amp; p &lt; x) {</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path26" class="msg msgEvent" style="margin-left:12ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">26</div></td><td><div class="PathNav"><a href="#Path25" title="Previous event (25)">&#x2190;</a></div></td></td><td>Assuming the condition is false</td><td><div class="PathNav"><a href="#EndPath" title="Next event (27)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>g_ascii_isspace (*p)<span class='macro_popup'>((g_ascii_table[(guchar) (*p)] &amp; G_ASCII_SPACE) != 0)</span></span>) {</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> <span class='keyword'>if</span> (!spacing) {</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> spacing = 1;</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> lastspace = o;</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> *o++ = ' ';</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> <span class='keyword'>continue</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"> spacing = 0;</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> <span class='keyword'>if</span> (count &gt; 75 &amp;&amp; lastspace) {</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> count = o - lastspace - 1;</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> *lastspace = '\n';</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> lastspace = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> }</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='keyword'>if</span> (*p == '&amp;') {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='keyword'>if</span> (g_ascii_strncasecmp (p, <span class='string_literal'>"&amp;amp;"</span>, 5) == 0) {</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> *o++ = '&amp;';</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> p += 5;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>continue</span>;</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"> <span class='keyword'>if</span> (g_ascii_strncasecmp (p, <span class='string_literal'>"&amp;lt;"</span>, 4) == 0) {</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> *o++ = '&lt;';</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</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'>if</span> (g_ascii_strncasecmp (p, <span class='string_literal'>"&amp;gt;"</span>, 4) == 0) {</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> *o++ = '&gt;';</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> }</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'>if</span> (*p == '&lt;') {</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='keyword'>if</span> (g_ascii_strncasecmp (p, <span class='string_literal'>"&lt;BR&gt;"</span>, 4) == 0) {</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> *o++ = '\n';</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> count = 0;</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"> <span class='keyword'>if</span> (g_ascii_strncasecmp (p, <span class='string_literal'>"&lt;B&gt;"</span>, 3) == 0) {</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> *o++ = '\n';</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> *o++ = '\n';</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> count = 0;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '&gt;')</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> <span class='keyword'>if</span> (*p)</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> *o++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> *<span class="mrange">o</span> = 0;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:8ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">27</div></td><td><div class="PathNav"><a href="#Path26" title="Previous event (26)">&#x2190;</a></div></td></td><td>Dereference of null pointer (loaded from variable 'o')</td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>return</span> buf;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line">}</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"> </td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> <span class='comment'>* Parse the metoffice forecast info.</span></td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='comment'>* For mate 3.0 we want to just embed an HTML matecomponent component and</span></td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> <span class='comment'>* be done with this ;)</span></td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"><span class='keyword'>static</span> gchar *</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line">met_parse (<span class='keyword'>const</span> gchar *meto)</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> gchar *p;</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> gchar *rp;</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> gchar *r = g_strdup (<span class='string_literal'>"Met Office Forecast\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> gchar *t;</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"> <span class="mrange"><span class='macro'>g_return_val_if_fail</span> (meto != NULL, r)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (meto != ((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__)), "meto != NULL");<br> return (r); } } while (0)</span></span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path9" class="msg msgEvent" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">9</div></td><td><div class="PathNav"><a href="#Path8" title="Previous event (8)">&#x2190;</a></div></td></td><td>Assuming 'meto' is not equal to null</td><td><div class="PathNav"><a href="#Path10" title="Next event (10)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path10" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">10</div></td><td><div class="PathNav"><a href="#Path9" title="Previous event (9)">&#x2190;</a></div></td></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path11" title="Next event (11)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path11" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">11</div></td><td><div class="PathNav"><a href="#Path10" title="Previous event (10)">&#x2190;</a></div></td></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path12" title="Next event (12)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path12" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">12</div></td><td><div class="PathNav"><a href="#Path11" title="Previous event (11)">&#x2190;</a></div></td></td><td>Loop condition is false. Exiting loop</td><td><div class="PathNav"><a href="#Path13" title="Next event (13)">&#x2192;</a></div></td></tr></table></div></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"> p = strstr (meto, <span class='string_literal'>"Summary: &lt;/b&gt;"</span>);</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class="mrange"><span class='macro'>g_return_val_if_fail</span> (p != NULL, r)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (p != ((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__)), "p != NULL"); return<br> (r); } } while (0)</span></span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path13" class="msg msgEvent" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">13</div></td><td><div class="PathNav"><a href="#Path12" title="Previous event (12)">&#x2190;</a></div></td></td><td>Assuming 'p' is not equal to null</td><td><div class="PathNav"><a href="#Path14" title="Next event (14)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path14" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">14</div></td><td><div class="PathNav"><a href="#Path13" title="Previous event (13)">&#x2190;</a></div></td></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path15" title="Next event (15)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path15" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">15</div></td><td><div class="PathNav"><a href="#Path14" title="Previous event (14)">&#x2190;</a></div></td></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path16" title="Next event (16)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path16" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">16</div></td><td><div class="PathNav"><a href="#Path15" title="Previous event (15)">&#x2190;</a></div></td></td><td>Loop condition is false. Exiting loop</td><td><div class="PathNav"><a href="#Path17" title="Next event (17)">&#x2192;</a></div></td></tr></table></div></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"> rp = strstr (p, <span class='string_literal'>"Text issued at:"</span>);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> <span class="mrange"><span class='macro'>g_return_val_if_fail</span> (rp != NULL, r)<span class='macro_popup'>do { if ((__builtin_expect (__extension__ ({ int _g_boolean_var_<br>; if (rp != ((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__)), "rp != NULL"); return<br> (r); } } while (0)</span></span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path17" class="msg msgEvent" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">17</div></td><td><div class="PathNav"><a href="#Path16" title="Previous event (16)">&#x2190;</a></div></td></td><td>Assuming 'rp' is not equal to null</td><td><div class="PathNav"><a href="#Path18" title="Next event (18)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path18" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">18</div></td><td><div class="PathNav"><a href="#Path17" title="Previous event (17)">&#x2190;</a></div></td></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path19" title="Next event (19)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path19" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">19</div></td><td><div class="PathNav"><a href="#Path18" title="Previous event (18)">&#x2190;</a></div></td></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path20" title="Next event (20)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path20" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">20</div></td><td><div class="PathNav"><a href="#Path19" title="Previous event (19)">&#x2190;</a></div></td></td><td>Loop condition is false. Exiting loop</td><td><div class="PathNav"><a href="#Path21" title="Next event (21)">&#x2192;</a></div></td></tr></table></div></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"> p += 13;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> <span class='comment'>/* p to rp is the text block we want but in HTML malformat */</span></td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> t = g_strconcat (r, <span class="mrange">met_reprocess (p, rp - p)</span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path21" class="msg msgEvent" style="margin-left:25ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">21</div></td><td><div class="PathNav"><a href="#Path20" title="Previous event (20)">&#x2190;</a></div></td></td><td>Calling 'met_reprocess'</td><td><div class="PathNav"><a href="#Path22" title="Next event (22)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free (r);</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"> <span class='keyword'>return</span> t;</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"> </td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line">met_finish (SoupSession *session, SoupMessage *msg, gpointer data)</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"> WeatherInfo *info = (WeatherInfo *)data;</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> <span class="mrange"><span class='macro'>g_return_if_fail</span> (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><td class="num"></td><td class="line"><div id="Path1" class="msg msgEvent" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">1</div></td><td>Assuming 'info' is not equal to 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><td>Taking true branch</td><td><div class="PathNav"><a href="#Path3" title="Next event (3)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path3" class="msg msgControl" style="margin-left:5ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">3</div></td><td><div class="PathNav"><a href="#Path2" title="Previous event (2)">&#x2190;</a></div></td></td><td>Taking true branch</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><td>Loop condition is false. Exiting loop</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="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"> <span class='keyword'>if</span> (!<span class="mrange"><span class="mrange"><span class='macro'>SOUP_STATUS_IS_SUCCESSFUL</span></span> (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><td class="num"></td><td class="line"><div id="Path5" class="msg msgEvent" style="margin-left:10ex"><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><td>Assuming field 'status_code' is &gt;= 200</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 msgEvent" style="margin-left:10ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">6</div></td><td><div class="PathNav"><a href="#Path5" title="Previous event (5)">&#x2190;</a></div></td></td><td>Assuming field 'status_code' is &lt; 300</td><td><div class="PathNav"><a href="#Path7" title="Next event (7)">&#x2192;</a></div></td></tr></table></div></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><td>Taking false branch</td><td><div class="PathNav"><a href="#Path8" title="Next event (8)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> g_warning (<span class='string_literal'>"Failed to get Met Office forecast data: %d %s.\n"</span>,</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> msg-&gt;status_code, msg-&gt;reason_phrase);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</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="157"><td class="num" id="LN157">157</td><td class="line"> <span class='keyword'>return</span>;</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"> info-&gt;forecast = <span class="mrange">met_parse (msg-&gt;response_body-&gt;data)</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path8" class="msg msgEvent" style="margin-left:22ex"><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><td>Calling 'met_parse'</td><td><div class="PathNav"><a href="#Path9" title="Next event (9)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</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="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"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line">metoffice_start_open (WeatherInfo *info)</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> gchar *url;</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> SoupMessage *msg;</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> WeatherLocation *loc;</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> loc = info-&gt;location;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> url = g_strdup_printf (<span class='string_literal'>"http://www.metoffice.gov.uk/weather/europe/uk/%s.html"</span>, loc-&gt;zone + 1);</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> msg = soup_message_new (<span class='string_literal'>"GET"</span>, url);</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> soup_session_queue_message (info-&gt;session, msg, met_finish, info);</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> g_free (url);</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> info-&gt;requests_pending++;</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/[email protected]_v1.25.0/report-6df16c.html b/[email protected]_v1.25.0/report-6df16c.html
new file mode 100644
index 0000000..c73e949
--- /dev/null
+++ b/[email protected]_v1.25.0/report-6df16c.html
@@ -0,0 +1,920 @@
+<!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 Out of bound memory access (access exceeds upper limit of memory block) -->
+
+<!-- BUGTYPE Out-of-bound access -->
+
+<!-- BUGCATEGORY Logic error -->
+
+<!-- BUGFILE /rootdir/libmateweather/weather-metar.c -->
+
+<!-- FILENAME weather-metar.c -->
+
+<!-- FUNCTIONNAME metar_tok_vis -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 9ba4ebf258edeab791a09e71980e85fd -->
+
+<!-- BUGLINE 169 -->
+
+<!-- BUGCOLUMN 24 -->
+
+<!-- BUGPATHLENGTH 9 -->
+
+<!-- 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 169, column 24</a><br />Out of bound memory access (access exceeds upper limit of memory block)</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 -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 -mrelocation-model pic -pic-level 2 -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -momit-leaf-frame-pointer -resource-dir /usr/lib64/clang/9.0.1 -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/fribidi -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gio-unix-2.0 -I /usr/include/libdrm -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/9.0.1/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 -fmessage-length 0 -fobjc-runtime=gcc -fdiagnostics-show-option -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-06-24-143959-5644-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": {"149": 1, "150": 1, "151": 1, "152": 1, "153": 1, "154": 1, "156": 1, "158": 1, "162": 1, "164": 1, "165": 1, "166": 1, "169": 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]+");
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelectorAll(".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) {
+ document.querySelectorAll(".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> (<span class="mrange">!strcmp (tokp,<span class='string_literal'>"CAVOK"</span>)</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 the condition is false</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><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="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> (<span class="mrange">0 != (pend = strstr (tokp, <span class='string_literal'>"SM"</span>))</span>) {</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path3" class="msg msgEvent" style="margin-left:16ex"><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><td>Assuming the condition is true</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:12ex"><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><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="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> (<span class="mrange">pfrac</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><td>Assuming 'pfrac' 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><td>Taking true 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="166"><td class="num" id="LN166">166</td><td class="line"> <span class='keyword'>if</span> (<span class="mrange">*tokp == 'M') {</td></tr></span>
+<tr><td class="num"></td><td class="line"><div id="Path7" class="msg msgEvent" style="margin-left:17ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">7</div></td><td><div class="PathNav"><a href="#Path6" title="Previous event (6)">&#x2190;</a></div></td></td><td>Assuming the condition is false</td><td><div class="PathNav"><a href="#Path8" title="Next event (8)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path8" class="msg msgControl" style="margin-left:13ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">8</div></td><td><div class="PathNav"><a href="#Path7" title="Previous event (7)">&#x2190;</a></div></td></td><td>Taking false branch</td><td><div class="PathNav"><a href="#EndPath" title="Next event (9)">&#x2192;</a></div></td></tr></table></div></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 = (<span class="mrange">*(pfrac - 1)</span> - '0');</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:24ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">9</div></td><td><div class="PathNav"><a href="#Path8" title="Previous event (8)">&#x2190;</a></div></td></td><td>Out of bound memory access (access exceeds upper limit of memory block)</td></tr></table></div></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 = TIME_RE;</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]_v1.25.0/report-9184c4.html b/[email protected]_v1.25.0/report-9184c4.html
new file mode 100644
index 0000000..dd521e1
--- /dev/null
+++ b/[email protected]_v1.25.0/report-9184c4.html
@@ -0,0 +1,912 @@
+<!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 -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 -mrelocation-model pic -pic-level 2 -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -momit-leaf-frame-pointer -resource-dir /usr/lib64/clang/9.0.1 -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/fribidi -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gio-unix-2.0 -I /usr/include/libdrm -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/9.0.1/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 -fmessage-length 0 -fobjc-runtime=gcc -fdiagnostics-show-option -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-06-24-143959-5644-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]+");
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelectorAll(".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) {
+ document.querySelectorAll(".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]_v1.25.0/report-919fee.html b/[email protected]_v1.25.0/report-919fee.html
new file mode 100644
index 0000000..85b870b
--- /dev/null
+++ b/[email protected]_v1.25.0/report-919fee.html
@@ -0,0 +1,2025 @@
+<!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 -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 -mrelocation-model pic -pic-level 2 -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -momit-leaf-frame-pointer -resource-dir /usr/lib64/clang/9.0.1 -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/fribidi -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gio-unix-2.0 -I /usr/include/libdrm -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/9.0.1/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 -fmessage-length 0 -fobjc-runtime=gcc -fdiagnostics-show-option -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-06-24-143959-5644-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]+");
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelectorAll(".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) {
+ document.querySelectorAll(".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) : 0<br>); (!(__extension__ ({ _Static_assert (sizeof *(&amp;mateweather_gettext_initialized<br>) == sizeof (gpointer), "Expression evaluates to false"); __sync_synchronize<br> (); (gpointer) *(&amp;mateweather_gettext_initialized); })) &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"); (void<br>) (0 ? *(&amp;mateweather_gettext_initialized) = ((!(0))) : 0<br>); 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]_v1.25.0/report-96ead2.html b/[email protected]_v1.25.0/report-96ead2.html
new file mode 100644
index 0000000..c7745df
--- /dev/null
+++ b/[email protected]_v1.25.0/report-96ead2.html
@@ -0,0 +1,428 @@
+<!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 -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-chec