forked from dwcaress/MB-System
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChangeLog.html
More file actions
7815 lines (7806 loc) · 438 KB
/
Copy pathChangeLog.html
File metadata and controls
7815 lines (7806 loc) · 438 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc 3.10.1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>ChangeLog</title>
<style>
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: 1.5em;}
div.column{flex: auto;}
@media screen {
div.columns{gap: min(4vw, 1.5em);}
div.column{overflow-x: auto;}
}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<style type="text/css">body {
font-family: Helvetica, arial, sans-serif;
font-size: 14px;
line-height: 1.6;
padding-top: 10px;
padding-bottom: 10px;
background-color: white;
padding: 30px; }
body > *:first-child {
margin-top: 0 !important; }
body > *:last-child {
margin-bottom: 0 !important; }
a {
color: #4183C4; }
a.absent {
color: #cc0000; }
a.anchor {
display: block;
padding-left: 30px;
margin-left: -30px;
cursor: pointer;
position: absolute;
top: 0;
left: 0;
bottom: 0; }
h1, h2, h3, h4, h5, h6 {
margin: 20px 0 10px;
padding: 0;
font-weight: bold;
-webkit-font-smoothing: antialiased;
cursor: text;
position: relative; }
h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA09pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoMTMuMCAyMDEyMDMwNS5tLjQxNSAyMDEyLzAzLzA1OjIxOjAwOjAwKSAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OUM2NjlDQjI4ODBGMTFFMTg1ODlEODNERDJBRjUwQTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OUM2NjlDQjM4ODBGMTFFMTg1ODlEODNERDJBRjUwQTQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5QzY2OUNCMDg4MEYxMUUxODU4OUQ4M0REMkFGNTBBNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5QzY2OUNCMTg4MEYxMUUxODU4OUQ4M0REMkFGNTBBNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsQhXeAAAABfSURBVHjaYvz//z8DJYCRUgMYQAbAMBQIAvEqkBQWXI6sHqwHiwG70TTBxGaiWwjCTGgOUgJiF1J8wMRAIUA34B4Q76HUBelAfJYSA0CuMIEaRP8wGIkGMA54bgQIMACAmkXJi0hKJQAAAABJRU5ErkJggg==) no-repeat 10px center;
text-decoration: none; }
h1 tt, h1 code {
font-size: inherit; }
h2 tt, h2 code {
font-size: inherit; }
h3 tt, h3 code {
font-size: inherit; }
h4 tt, h4 code {
font-size: inherit; }
h5 tt, h5 code {
font-size: inherit; }
h6 tt, h6 code {
font-size: inherit; }
h1 {
font-size: 28px;
color: black; }
h2 {
font-size: 24px;
border-bottom: 1px solid #cccccc;
color: black; }
h3 {
font-size: 18px; }
h4 {
font-size: 16px; }
h5 {
font-size: 14px; }
h6 {
color: #777777;
font-size: 14px; }
p, blockquote, ul, ol, dl, li, table, pre {
margin: 15px 0; }
hr {
background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENDRjNBN0E2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENDRjNBN0I2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0NGM0E3ODY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0NGM0E3OTY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqqezsUAAAAfSURBVHjaYmRABcYwBiM2QSA4y4hNEKYDQxAEAAIMAHNGAzhkPOlYAAAAAElFTkSuQmCC) repeat-x 0 0;
border: 0 none;
color: #cccccc;
height: 4px;
padding: 0;
}
body > h2:first-child {
margin-top: 0;
padding-top: 0; }
body > h1:first-child {
margin-top: 0;
padding-top: 0; }
body > h1:first-child + h2 {
margin-top: 0;
padding-top: 0; }
body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
margin-top: 0;
padding-top: 0; }
a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
margin-top: 0;
padding-top: 0; }
h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
margin-top: 0; }
li p.first {
display: inline-block; }
li {
margin: 0; }
ul, ol {
padding-left: 30px; }
ul :first-child, ol :first-child {
margin-top: 0; }
dl {
padding: 0; }
dl dt {
font-size: 14px;
font-weight: bold;
font-style: italic;
padding: 0;
margin: 15px 0 5px; }
dl dt:first-child {
padding: 0; }
dl dt > :first-child {
margin-top: 0; }
dl dt > :last-child {
margin-bottom: 0; }
dl dd {
margin: 0 0 15px;
padding: 0 15px; }
dl dd > :first-child {
margin-top: 0; }
dl dd > :last-child {
margin-bottom: 0; }
blockquote {
border-left: 4px solid #dddddd;
padding: 0 15px;
color: #777777; }
blockquote > :first-child {
margin-top: 0; }
blockquote > :last-child {
margin-bottom: 0; }
table {
padding: 0;border-collapse: collapse; }
table tr {
border-top: 1px solid #cccccc;
background-color: white;
margin: 0;
padding: 0; }
table tr:nth-child(2n) {
background-color: #f8f8f8; }
table tr th {
font-weight: bold;
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }
table tr td {
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }
table tr th :first-child, table tr td :first-child {
margin-top: 0; }
table tr th :last-child, table tr td :last-child {
margin-bottom: 0; }
img {
max-width: 100%; }
span.frame {
display: block;
overflow: hidden; }
span.frame > span {
border: 1px solid #dddddd;
display: block;
float: left;
overflow: hidden;
margin: 13px 0 0;
padding: 7px;
width: auto; }
span.frame span img {
display: block;
float: left; }
span.frame span span {
clear: both;
color: #333333;
display: block;
padding: 5px 0 0; }
span.align-center {
display: block;
overflow: hidden;
clear: both; }
span.align-center > span {
display: block;
overflow: hidden;
margin: 13px auto 0;
text-align: center; }
span.align-center span img {
margin: 0 auto;
text-align: center; }
span.align-right {
display: block;
overflow: hidden;
clear: both; }
span.align-right > span {
display: block;
overflow: hidden;
margin: 13px 0 0;
text-align: right; }
span.align-right span img {
margin: 0;
text-align: right; }
span.float-left {
display: block;
margin-right: 13px;
overflow: hidden;
float: left; }
span.float-left span {
margin: 13px 0 0; }
span.float-right {
display: block;
margin-left: 13px;
overflow: hidden;
float: right; }
span.float-right > span {
display: block;
overflow: hidden;
margin: 13px auto 0;
text-align: right; }
code, tt {
margin: 0 2px;
padding: 0 5px;
white-space: nowrap;
border: 1px solid #eaeaea;
background-color: #f8f8f8;
border-radius: 3px; }
pre code {
margin: 0;
padding: 0;
white-space: pre;
border: none;
background: transparent; }
.highlight pre {
background-color: #f8f8f8;
border: 1px solid #cccccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px; }
pre {
background-color: #f8f8f8;
border: 1px solid #cccccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px; }
pre code, pre tt {
background-color: transparent;
border: none; }
sup {
font-size: 0.83em;
vertical-align: super;
line-height: 0;
}
kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb
}
* {
-webkit-print-color-adjust: exact;
}
@media screen and (min-width: 914px) {
body {
width: 854px;
margin:0 auto;
}
}
@media print {
table, pre {
page-break-inside: avoid;
}
pre {
word-wrap: break-word;
}
body {
padding: 2cm; }
}
</style>
</head>
<body>
<header id="title-block-header">
<h1 class="title">ChangeLog</h1>
</header>
<h2 id="mb-system-changelog-file">MB-System ChangeLog File:</h2>
<p>This file lists changes to the source code of the MB-System open
source software package for the processing and display of swath sonar
data. This file is located at the top of the MB-System source code
distribution directory structure.</p>
<p>In the list below, releases shown in bold type are major, announced
releases. The other entries are test or "beta" releases that were not
announced and generally not widely distributed. Prior to 5.7.1, the
MB-System source code repository was a privately hosted Subversion
archive. In that era, announced source distribution releases were made
available for download by ftp. Starting with 5.7.1 the MB-System source
code repository is hosted by Github at <a href="https://github.com/dwcaress/MB-System/">https://github.com/dwcaress/MB-System/</a>
and each distribution corresponds to a discrete Github release tag.
Releases that include "beta" in the tag name are preliminary and
generally not announced. Distributions that do not include "beta" in the
tag name correspond to the major, announced releases. The source
distributions associated with all releases, major or beta, are equally
accessible as tarballs through the Github interface.</p>
<hr />
<h3 id="mb-system-version-58-releases-and-release-notes">MB-System
Version 5.8 Releases and Release Notes:</h3>
<hr />
<ul>
<li>Version 5.8.3beta16 July 26, 2026</li>
<li>Version 5.8.3beta15 July 26, 2026</li>
<li>Version 5.8.3beta14 July 6, 2026</li>
<li>Version 5.8.3beta13 June 18, 2026</li>
<li>Version 5.8.3beta12 January 7, 2026</li>
<li>Version 5.8.3beta11 December 27, 2025</li>
<li>Version 5.8.3beta10 December 22, 2025</li>
<li>Version 5.8.3beta09 December 4, 2025</li>
<li>Version 5.8.3beta08 November 16, 2025</li>
<li>Version 5.8.3beta07 October 22, 2025</li>
<li>Version 5.8.3beta06 October 1, 2025</li>
<li>Version 5.8.3beta05 September 30, 2025</li>
<li>Version 5.8.3beta04 September 18, 2025</li>
<li>Version 5.8.3beta03 August 31, 2025</li>
<li>Version 5.8.3beta02 August 29, 2025</li>
<li>Version 5.8.3beta01 August 27, 2025</li>
<li><strong>Version 5.8.2 August 19, 2025</strong></li>
<li>Version 5.8.2beta24 July 19, 2025</li>
<li>Version 5.8.2beta23 June 25, 2025</li>
<li>Version 5.8.2beta22 June 16, 2025</li>
<li>Version 5.8.2beta21 March 15, 2025</li>
<li>Version 5.8.2beta20 February 22, 2025</li>
<li>Version 5.8.2beta19 January 19, 2025</li>
<li>Version 5.8.2beta18 December 8, 2024</li>
<li>Version 5.8.2beta17 November 7, 2024</li>
<li>Version 5.8.2beta16 November 6, 2024</li>
<li>Version 5.8.2beta15 October 1, 2024</li>
<li>Version 5.8.2beta14 September 6, 2024</li>
<li>Version 5.8.2beta13 August 23, 2024</li>
<li>Version 5.8.2beta12 August 22, 2024</li>
<li>Version 5.8.2beta11 August 19, 2024</li>
<li>Version 5.8.2beta10 August 16, 2024</li>
<li>Version 5.8.2beta09 August 4, 2024</li>
<li>Version 5.8.2beta08 July 27, 2024</li>
<li>Version 5.8.2beta07 June 27, 2024</li>
<li>Version 5.8.2beta06 June 13, 2024</li>
<li>Version 5.8.2beta05 May 19, 2024</li>
<li>Version 5.8.2beta04 May 13, 2024</li>
<li>Version 5.8.2beta02 May 1, 2024</li>
<li>Version 5.8.2beta01 April 29, 2024</li>
<li><strong>Version 5.8.1 March 22, 2024</strong></li>
<li>Version 5.8.1beta09 March 22, 2024</li>
<li>Version 5.8.1beta08 March 10, 2024</li>
<li>Version 5.8.1beta07 February 24, 2024</li>
<li>Version 5.8.1beta04 February 16, 2024</li>
<li>Version 5.8.1beta03 February 8, 2024</li>
<li>Version 5.8.1beta02 February 7, 2024</li>
<li>Version 5.8.1beta01 February 1, 2024</li>
<li><strong>Version 5.8.0 January 22, 2024</strong></li>
</ul>
<hr />
<h4 id="583beta16-july-26-2026">5.8.3beta16 (July 26, 2026)</h4>
<p>Program mbusbl2fnv: New program that converts a USBL (ultra-short
baseline) ROV tracking CSV file to an MB-System fast navigation (fnv)
text file. The input CSV format has one header line followed by data
lines giving epoch time, latitude, longitude, and ROV depth; heading,
speed, roll, pitch, and heave are not present in USBL tracking data and
are output as 0.0.</p>
<p>Program mbswath2las: New program that exports swath bathymetry
soundings to LAS 1.4 point cloud files, one point per valid (unflagged)
beam, allowing swath bathymetry to be loaded directly into
LAS/LIDAR-oriented point cloud viewers, GIS packages, and processing
pipelines (e.g. CloudCompare, QGIS, PDAL) that do not otherwise read
MBIO formats. By default sounding positions are written as geographic
longitude/latitude in decimal degrees (WGS84); a projected coordinate
system may instead be specified so that positions are written as
easting/northing in meters.</p>
<p>Build system: Continued work to allow MB-System to build on Windows,
extending fixes made previously to the CMake configuration and to
src/mbtrn and src/mbtrnav. This round of changes covers the non-TRN
libraries and programs: src/gsf (CMakeLists.txt changes only, no code
changes required), src/mbio (mb_defaults.c, mb_mem.c, and
mbsys_kmbes.c), src/gmt, and src/mbaux, src/bsio, and src/surf, where
the Windows shim for XDR is now built as its own library,
libmb_xdr_win32, within src/mbaux. Also updated src/mbgrd2ltf,
src/mbmesh, src/otps, and src/photo to build consistently on MacOs,
Linux, and Windows, along with a number of general CMake
project-structure fixes.</p>
<p>Library mbview: Fixed a memory-management bug in route handling in
which deleting the last point of a route (removing the whole route)
shifted the internal route array down without first freeing the deleted
route's own point/segment arrays and without clearing the vacated array
slot afterward. This leaked memory, silently caused two routes to alias
the same underlying arrays, and could crash mbgrdviz and other
mbview-based programs with a double free when routes were deleted and
new routes subsequently added. A broader audit of the mbview route,
navigation, site, and vector handling code found and fixed several
related problems: an inverted bounds check in mbview_getrouteinfo() that
allowed out-of-bounds array reads; a memory leak on navigation-line
deletion (per-segment drape buffers were never freed); dead code in the
route list widget that silently disabled selection highlighting;
uninitialized segment endpoint data when adding vectors; and
list-selection and list-deletion callbacks for the route and navigation
list dialogs that could act on the wrong entry if a list item were ever
marked inactive. Also fixed the title bars of the 2D Parameters, 3D
Parameters, Shading Parameters, Profile Display, About, and "please
wait" message dialogs, which previously displayed internal Motif widget
names (e.g. "mbview_dialogShell_2dparms") instead of readable
titles.</p>
<p>Program mbgrdviz: Fixed a bug in the Generate Survey Route feature in
which a cached route index could go stale if the user deleted an
unrelated route via the 3D view while the Area Route dialog remained
open, causing the next "Generate Survey" click to delete the wrong
route. Also fixed the title bar of the Area Route dialog, which
previously displayed the internal widget name "dialogShell_arearoute"
instead of "Generate Survey Route for Selected Area...".</p>
<p>Program mbeditviz: Fixed a crash on opening a swath file that MBIO
cannot actually read, caused by a missing status check before
dereferencing the file handle. Fixed a memory-management bug in file
deletion analogous to the mbview route bug above, in which removing a
file from the loaded-files list left a stale duplicate array slot that
could later alias data between two loaded files. Fixed several
file-record fields (including processed-file-info and sensordepth
navigation arrays) that were left uninitialized on newly imported files.
Added a bounds check to the ping-reading loop to prevent a heap buffer
overflow when a swath file's *.inf index file undercounts its actual
number of pings. Fixed a bug in which dismissing the 3D soundings window
overwrote the global verbosity setting rather than the intended
error-code variable. Fixed a bug in which a single navigation-loading
failure for one file silently skipped loading navigation for every
subsequent file in the same session. Fixed a leak and potential crash on
the (rare) memory allocation failure path when importing files. Fixed
the title bar of the Error dialog (previously showed
"dialogShell_error") and corrected a garbled status message ("Reading
data list...").</p>
<p>Program mbnavadjust (and the mbnavadjustmerge and mbnavadjustfine
tools that share its project I/O and data structures): Fixed a bug in
which deleting a tie point used a stale, unrelated global variable
instead of the tie actually being deleted, corrupting which tie was
removed and, in one call path, capable of an out-of-bounds write into
the crossings array. Fixed a wide-ranging set of missing bounds checks
in the project file reader, which previously trusted the file's own
record counts and array indices to size loops and index fixed-size
per-crossing and per-section arrays, and used unbounded string
conversions into fixed-size path buffers - a corrupted or hand-edited
project file could overflow multiple buffers. Fixed a bug in which
removing a file from a project (via mbnavadjustmerge) left remaining
sections' file/section identity fields stale, able to silently
misattribute sections to the wrong file. Fixed a memory leak in which a
file's section array was allocated with the standard C library and freed
with an MB-System function that only recognizes memory it allocated
itself, so the free silently did nothing. Fixed three sites in
mbnavadjustmerge where a newly grown crossing's file references were
read before being assigned, an out-of-range crossing could be added with
no validation, and a failed allocation was not checked before the new
crossing was used. Fixed four missing-brace bugs that caused a
visualization update function to run unconditionally regardless of
whether a visualization window was ever open. Fixed a command-line tool
(mbnavadjustfine) build break caused by a call with the wrong number of
arguments, a numeric option that corrupted adjacent settings and always
aborted the program, an uninitialized pointer used in an error message,
a per-crossing memory leak, continuing an alignment computation after
detecting invalid input, and a divide-by-zero when every sounding in a
section was flagged. Fixed a project-merging command that validated and
updated the wrong internal counter, and a project list display that
never showed survey-vs-survey "block" comparisons. Also fixed a missing
dialog title, a silent failure to write cached triangulation data, an
unchecked allocation before use, several unbounded command-line path
arguments, a dead duplicate-crossing check, an undefined-behavior
fclose() on a failed file open (7 sites), and a display counter that was
always zero.</p>
<p>Program mbnavadjust (and mbnavadjustmerge): A follow-up round of
fixes targeting crashes reported when displaying and selecting global
ties. Fixed invalid qsort() comparator functions for the sorted
global-tie and sorted crossing-tie list displays that never returned
zero for equal or incomparable elements, violating the
strict-weak-ordering contract required by qsort() and able to crash on
quicksort-family implementations (including those used by both Linux
glibc and macOS/BSD libc). Fixed a heap buffer overflow in the sparse
inversion matrix built for the preliminary per-block offset solution
(used by both the main navigation inversion and the "Autoset Z Offsets"
feature): the matrix's row stride was set to 3 times the number of
survey blocks, but the backing array was only ever allocated for a fixed
stride of 6, overflowing on any project combining more than two surveys
- an entirely ordinary case - during exactly the step that folds global
tie offsets into the solution. Fixed a stale-variable bug in the
"Autoset Z Offsets" feature where the per-block averaged global tie
offset was indexed with a leftover loop variable from an unrelated,
already-finished loop instead of the current block index, an
out-of-bounds heap read. Fixed a bug in mbnavadjustmerge where merging
additional files into a project unconditionally renumbered every copied
section's reference-grid ID, corrupting the "no reference grid assigned"
sentinel value into a bogus but plausible-looking grid index for any
section without a global tie or reference grid; a section thus corrupted
could cause mbnavadjust to load and display the wrong reference grid
when its global tie was later selected. Also fixed a missing bounds
check (and a related debug-only variable mixup) in the reference grid
loader that could read the reference-grid name array out of bounds given
a negative grid index, and fixed the project's global-tie counters not
being decremented when mbnavadjustmerge removes a file that held global
ties, which left the "ties analyzed" status display overcounted.</p>
<p>Program mbdatalist: Fixed a bug in which the long option --report
incorrectly triggered the same behavior as --copy instead of generating
a datalist report, due to a copy-paste error in the option-parsing
code.</p>
<p>Program mbinfo: Fixed a bug in which the long option --ping-variances
accepted but silently ignored its argument; only the equivalent short
option -P worked correctly.</p>
<p>Program mbmakeplatform: Fixed a typo (--platform-documenation-url)
that made the correctly-spelled --platform-documentation-url option
unrecognized. Fixed a bug in which --sensor-source-camera1/2/3 and
--set-source-camera1/2/3 were all registered under the same un-numbered
option name, making the numbered variants unreachable.</p>
<p>Program mbpreprocess: Fixed missing option-table entries for
--time-latency-apply-altitude and --filter-apply-altitude, which had
working handlers but were never recognized by the command-line parser.
Also fixed both handlers, which incorrectly applied the correction to
attitude data instead of altitude data due to using the wrong internal
flag bit.</p>
<p>Program mbvoxelclean: Fixed a bug in which --count-flagged was
declared as requiring an argument even though it is a boolean flag,
causing the documented bare-flag usage to be rejected by the
command-line parser.</p>
<p>Program mbsslayout: Fixed several option-parsing and
ancillary-data-correction bugs found during a documentation audit.
--line-route had a working handler but was never registered with the
option parser, making it unusable. --line-range-threshold was accepted
but silently discarded, so the survey-line range threshold was always
hardcoded to 50 meters regardless of what was specified on the command
line. --time-latency-apply-altitude applied its time latency correction
to attitude data instead of altitude data (the same bit-flag bug as in
mbpreprocess), and a soundspeed time-latency correction was gated on
that same wrong (attitude) flag bit, causing it to fire whenever
--time-latency-apply-attitude was used alone. The entire
--filter/--filter-apply-* family of options, intended to apply a
Gaussian time-domain filter to ancillary data (navigation, sensordepth,
heading, attitude, altitude), was never registered with the option
parser and had no implementation; this has now been implemented using
the existing mb_apply_time_filter() library function, mirroring the
equivalent feature in mbpreprocess. Added a new --line-position-list
option that defines survey lines from a simple ASCII file of waypoint
longitude/latitude pairs, as a lighter-weight alternative to
--line-route's full MB-System route file format.</p>
<p>Man pages: Audited the man pages for all 46 programs in src/utilities
against their actual command-line option implementations, finding and
fixing documentation discrepancies in 24 of them, including missing
options (mb7k2jstar, mbareaclean, mbauvloglist, mbbackangle, mbgetesf,
mbrolltimelag, mbroutetime, mbsegygrid, mbsegypsd, mbset, mbsvplist,
mbsslayout, mbvoxelclean, mbmakeplatform), stale options describing
command-line flags that no longer exist (mbclean, mbhistogram,
mbsegylist, mbsegypsd, mbsslayout, mbsvpselect), and incorrect
descriptions or default values (mb7k2jstar, mbclean, mbcopy,
mbextractsegy, mbfilter, mbminirovnav, mbmosaic, mbpreprocess,
mbrolltimelag, mbroutetime, mbset, mbsvplist, mbsvpselect,
mbvoxelclean). This audit also surfaced the mbsslayout and mbpreprocess
source-code bugs described above.</p>
<p>Program mbnavadjustmerge: Added --update-file, --update-survey, and
--update-all-files options that update the beam-validity flags in an
mbnavadjust project's section data to match the current processed
version of each swath file, matching pings by timestamp and copying over
only the flag byte - the navigation, attitude, bathymetry, amplitude,
and sidescan values already stored in the project are left untouched.
This lets soundings newly flagged bad by re-editing a file (e.g. with
mbclean or mbedit) after it was originally imported be excluded from the
project without a full, riskier re-import of the file's bathymetry. If a
matched ping's beam count no longer matches what is stored in the
project, that ping's flags are left unchanged and a warning is printed
rather than risk misapplying flags to the wrong beams; beams that never
held real sounding geometry when originally imported are likewise left
flagged null regardless of what the current processed file reports for
that beam index, since marking such a placeholder beam as
flagged-but-real would otherwise corrupt the scaled short-integer depth
encoding used by the project's section file format. Every updated
section's coverage mask and triangulated surface are automatically
regenerated. These options replace an earlier, incomplete
--reimport-file/--reimport-survey/--reimport-all-files implementation
that instead substituted bathymetry, amplitude, and sidescan values
wholesale from the reprocessed file; that implementation was never
released and has been removed.</p>
<p>Program mbnavadjustmerge: Added --create-project, --section-length,
--section-soundings, --contour-interval, --color-interval,
--tick-interval, --label-interval, --decimation, --smoothing, and
--zoffsetwidth options to create new mbnavadjust projects and change
project settings from the command line, matching functionality
previously available only in the mbnavadjust graphical interface. Added
--import and --import-as-survey to import swath data (a single file or a
recursive datalist), and --find-crossings to detect new crossings
between imported sections. Added --autopick and --autopick-horizontal to
automatically pick navigation ties at unanalyzed crossings, together
with --autopick-crossing-type, --autopick-scope, --autopick-survey,
--autopick-survey2, --autopick-file, --autopick-section, and
--autopick-overlap-threshold options to restrict which crossings are
considered. Implementing this required extracting the crossing-loading,
bathymetric misfit, and autopick logic out of mbnavadjust_prog.c
(previously usable only by the mbnavadjust graphical interface) into a
new shared library, mbnavadjust_core, linked by mbnavadjust,
mbnavadjustmerge, and mbnavadjustfine; the CMake build was restructured
so this library and mbnavadjustmerge no longer require Motif or X11 to
build, unblocking headless and CI builds of the command-line tool.</p>
<p>Program mbnavadjust (and mbnavadjustmerge): Fixed a bug in
mbnavadjust_new_project() in which the section_soundings setting was
accepted as a parameter but never actually stored in the new project, so
every newly created project silently used a section_soundings value of
zero regardless of what was requested, whether created via the graphical
New Project dialog or the command line.</p>
<p>Program mbnavadjust: Fixed a crash in the "Invert Navigation" menu
item (and the "Auto-Set Survey-vs-Survey Vertical Offsets" feature,
which shares the same code) in which a failed memory allocation for the
sparse least-squares matrix used by the navigation inversion was never
checked before the buffer was zeroed, crashing instead of reporting an
error; large enough projects could also silently compute the wrong,
too-small allocation size due to a 32-bit integer overflow in the
row-count/column-count multiplication used to size that matrix, risking
heap corruption on a subsequent write rather than a clean allocation
failure. Both are now fixed, with a dialog reported to the user if the
allocation still fails.</p>
<p>Program mbnavadjust: Fixed a bug in which selecting a
survey-vs-survey "block" from the Data Table list and then displaying
crossings restricted to that block could show no crossings at all. The
code that extracts the clicked list item's text had a fallback for when
Motif's primary text-retrieval method returns nothing, but the fallback
was nested inside a check that skipped it entirely whenever the primary
XmString field itself was null, rather than being reached whenever it
was actually needed.</p>
<p>Program mbnavadjust: Added long-form equivalents (--verbose, --help,
--dark-background, --input=project, --reset-crossings) for all existing
single-letter command-line options.</p>
<p>Program mbnavadjustmerge: Added --invert-navigation, --update-grids,
and --apply-navigation options, completing the navigation-adjustment
workflow begun with --autopick above. --invert-navigation solves the
network of ties and crossings for a corrected navigation model, exactly
as the "Invert Navigation" menu item does in mbnavadjust. --update-grids
regenerates the project's reference bathymetry grids from the current
navigation solution, equivalent to "Update Grids". --apply-navigation
writes the corrected navigation out to the swath data files' processing
parameters, equivalent to "Apply Navigation", and is normally the last
step in the workflow. Implementing this required moving the
navigation-inversion solver, grid-regeneration, and navigation-output
logic (previously usable only by the mbnavadjust graphical interface,
over 3000 lines in mbnavadjust_prog.c) into the shared mbnavadjust_core
library alongside the autopick logic moved previously.</p>
<p>Program mbnavadjust (and mbnavadjustmerge): Fixed a bug in
mbnavadjust_new_project() in which newly created projects never had
their navigation "use mode" initialized, silently defaulting to an
invalid value of zero. This had no visible effect in the graphical
interface, where a separate program-startup default masked the gap, but
meant that mbnavadjustmerge's --apply-navigation, run against a project
created with --create-project, would silently skip updating each file's
processing parameters with no error reported.</p>
<p>Program mbnavadjust: Fixed a regression from moving the
navigation-inversion, grid-update, and apply-navigation logic into the
shared mbnavadjust_core library (see above): the "please wait" message
dialog no longer appeared during Invert Navigation or Update Grids,
since those functions could no longer call GUI dialog functions
directly. Restored the dialog by wrapping the calls at each of their GUI
call sites (the Invert Navigation and Update Grids menu items, the
automatic grid update after importing data, and the automatic grid
update when opening a project whose topography grid does not yet exist)
with the same do_message_on()/do_message_off() pattern already used
elsewhere in the program, and did the same for Apply Adjusted
Navigation, which had the identical gap. A follow-up fix addressed a
second bug uncovered in the process: do_message_on() itself did not wait
for the dialog to actually become mapped and viewable before returning,
so on a dialog's first appearance in a session, the window manager's
mapping could still be pending when the long operation immediately
following it started; since none of these operations return control to
the window system's event loop until they finish, the dialog's initial
text could remain unpainted (an empty box) for the operation's entire
duration. Fixed by having do_message_on() wait for the dialog to become
viewable first, mirroring the equivalent wait already used for the main
window at startup.</p>
<p>Program mbnavadjust (and mbnavadjustmerge): During autopicking, a
crossing whose section length is less than 0.25 times the project's
desired section length is silently skipped (to avoid matching short
sections at the end of a file); this is now reported to the user with a
message stating the crossing was skipped due to short section length,
whether autopick is run interactively or via mbnavadjustmerge.</p>
<p>Program mbnavadjust: Fixed a segmentation fault when dismissing the
Nav Err (crossing analysis) window while no crossing was currently
loaded - for example immediately after clearing all ties to start over
with a project. The dismiss callback freed the window's graphics
contexts unconditionally instead of only when a crossing had actually
been loaded (as the equivalent code in the Quit handler already
correctly does), so dismissing the window a second time without an
intervening crossing load double-freed them, crashing in Xlib's
XFreeGC(). Diagnosed directly from the macOS crash report, which
resolved exactly to the offending XFreeGC() call once the crash binary's
UUID was confirmed to match the current build.</p>
<p>Program mbnavadjust: Fixed the Controls dialog showing stale values
when opened via the Nav Err window's Settings->Contours menu item,
rather than the current project settings shown when it is opened via the
main window's Option->Controls menu item. The main window's button
has two callbacks - one that refreshes every slider and toggle from the
project settings, followed by one that displays the dialog - while the
Nav Err window's button only had the second, display-only callback, so
it showed whatever values happened to be left over from the last time
the dialog was shown or applied. Fixed by adding the missing refresh
callback.</p>
<p>Program mbnavadjust: During autopicking, the crossing/section/tie
list display and model plot (if open) did not update again until the
entire run finished, since the loop that used to periodically refresh
them lost access to those GUI functions once it was moved into the
shared mbnavadjust_core library. They are now refreshed every tenth
crossing processed via a callback function pointer passed in only by the
interactive program; mbnavadjustmerge passes none, so the shared
autopick loop itself has no GUI dependency.</p>
<p>Program mbnavadjust: Fixed the grid region used by Update Grids,
which was computed from each section's original, unadjusted geographic
bounds and never updated afterward regardless of any navigation
inversion performed since - a solution that moved sections a significant
distance could leave the grid too small to encompass the shifted data.
The region is now recalculated from each section's original bounds
shifted by the range of its current navigation adjustment. The
per-survey grids' region, previously computed but never actually passed
to mbgrid (relying solely on mbgrid's own bounds auto-detection), is now
adjusted the same way and passed explicitly, matching the overall
project grid.</p>
<p>Programs mbedit, mbnavedit, and mbvelocitytool: A memory-management
and correctness audit of these three interactive Motif editors
(paralleling the earlier audits of src/utilities and mbview/mbeditviz)
found and fixed a critical NULL-pointer-write crash in mbnavedit's
"Invert Navigation" modeling mode, triggered by ordinary use whenever
exactly one point is visible: the inversion matrix's row-count formula
went to zero for a single point, and mb_mallocd() treats a zero-byte
allocation as a successful NULL return, so the code proceeded to write
through the NULL buffer. All three programs shared a second bug: their
get_text_string() helper did an unbounded strcpy() from any Motif text
field into fixed-size buffers as small as 10 bytes, with no widget-side
length limit set on any of the fields - fixed by adding an explicit
destination-size parameter to the helper in all three programs. All
three also shared an unterminated strncpy() when copying a user-selected
file path from the file-selection dialog, which could read past the
destination buffer on sufficiently long paths. Several additional bugs
specific to each program were also fixed: in mbedit, undersized
bottom-detect-type and pulse-type name lookup tables that indexed past
their end on lidar/photogrammetry data, a reversed bit-shift that
corrupted the extracted detection-priority value, and an out-of-bounds
neighbor read in the median-spike filter's along-track window; in
mbnavedit, an uninitialized-neighbor read that produced garbage
speed/course-made-good values for single-point buffers, an off-by-one
that silently excluded the first visible point from mouse "pick" mode,
and unreliable time-interval bookkeeping after deleting bad-time records
(replaced with a straightforward recompute pass); in mbvelocitytool,
four sites where a chain of unchecked mb_mallocd() calls could let a
later successful allocation mask an earlier failure and use the
resulting NULL pointer, a divide-by-zero (surfacing as a silently
propagated NaN) in the per-ping depth-residual linear fit when only one
beam survived flagging, an uninitialized sensor-depth value used when
every beam in a ping was flagged bad, a stray "!= 60" condition that
silently skipped freeing all per-ping data buffers for any ping with
exactly 60 beams, and a latent (then-unreachable) heap overflow in the
profile-deletion code that copied array contents into a
differently-sized, already-freed destination buffer rather than moving
the whole profile record.</p>
<p>Man pages: Audited the mbedit, mbnavedit, and mbvelocitytool man
pages against their actual command-line options and current GUI
behavior. Fixed a wrong option letter (mbedit's browse mode is -D, not
-B, as the man page stated), two stale/nonexistent options in
mbnavedit's synopsis and options list (-O and -T, neither implemented in
the code), and several wrong default values and figures across all three
(data buffer sizes, mbvelocitytool's default format id, default
editable-profile point count, and maximum number of display profiles).
Also fixed a self-contradicting keyboard-macro table in mbedit's man
page (Grab and Info mode keys were listed backwards in one place and
correctly in another), a mislabeled duplicate section heading, and added
documentation for several existing but previously undocumented features:
mbedit's "Flag by Beam Angle" filter and median-filter window-size
sliders, its three-way exclusive "Show Flag States / Show Bottom Detect
Algorithms / Show Source Pulse Types" view toggle, and mbnavedit's
"Sonar Depth Plot" toggle.</p>
<p>Man pages: Removed the mbps, geod, and proj man pages (and mbps's
generated html/pdf docs). The mbps man page documented a program with no
corresponding source file or build target anywhere in the current source
tree - it was already gone from the build, just not from the
documentation. The geod and proj man pages documented command-line tools
belonging to the external PROJ library dependency rather than programs
developed as part of MB-System, and were never actually wired into
either build system to begin with. Updated both the CMake and autotools
build files for src/man/man1 and src/html to remove the now-dangling
references to these three pages.</p>
<p>Programs in src/utilities: Added long-option (--long-name)
equivalents to every remaining command-line program in src/utilities
that previously supported only traditional single-letter options,
extending the getopt_long() support already in place for about 15 other
utilities (mbinfo, mbdatalist, mbpreprocess, mbsslayout, mbvoxelclean,
etc.). This covers 31 programs: mb7k2jstar, mbabsorption, mbareaclean,
mbauvloglist, mbbackangle, mbclean, mbcopy, mbctdlist, mbdefaults,
mbextractsegy, mbfilter, mbformat, mbgetesf, mbgrid, mbhistogram,
mblevitus, mblist, mbmapscale, mbmosaic, mbnavlist, mbprocess,
mbrolltimelag, mbroutetime, mbsegygrid, mbsegyinfo, mbsegylist,
mbsegypsd, mbset, mbsvplist, mbsvpselect, and mbtime. Every existing
short option continues to work exactly as before; each program's --help
output now lists every long/short pair. This work surfaced four short
options that had been silently accepted by each program's option parser
for the program's entire history (predating even this repository's 2019
move from Subversion to Git) with no corresponding case handler at all -
inert no-ops with no effect and no documentation anywhere. Investigating
each: mbsegylist's -W turned out to be real, unimplemented functionality
- mbsegylist is a segy-format sibling of mblist, which has a working
-W/--use-feet that converts bathymetry and distance output columns from
meters to feet, and mbsegylist's own man page documents its fixed
sonar-depth and water-depth output columns in meters, strongly
suggesting the option string was copied from mblist without ever porting
the conversion logic; -W/--use-feet is now fully implemented in
mbsegylist and documented in its man page. The other three
(mbauvloglist's -W, mbsegypsd's -P, mbextractsegy's -D) had no
discoverable intended purpose anywhere in the code, man pages, or usage
messages, so rather than guess at functionality they were removed
outright.</p>
<p>Programs mbedit, mbnavedit, mbvelocitytool, mbgrdviz, and mbeditviz:
Added long-option (--long-name) equivalents to these five interactive
Motif programs' command-line options, extending the getopt_long() work
above from src/utilities to the GUI editors (mbnavadjust was requested
too but already had full getopt_long() support). As with src/utilities,
this surfaced a dead option with no case handler at all: mbedit's -S.
Unlike the src/utilities finds, this one had a full, traceable history
back to 1993 - before MB-System's "Version 5.0" rewrite in 2000, -S set
a startup_save_mode flag controlling whether a pre-existing edit save
(.esf) file would be loaded for the input file; the getopt string lost
its argument and the case handler was later dropped entirely as the code
was restructured into the modern Motif-callback architecture, but the
underlying feature never actually disappeared - mbedit still has two
live callback paths, one that loads a file fresh and one that loads it
using an existing edit save file, offered to the user via a "use
previous edits?" dialog that pops up at startup whenever a save file
already exists. The CLI flag's original job was simply to skip that
dialog and answer "yes" automatically, exactly the kind of thing needed
when mbedit is launched non-interactively by another process (the same
rationale as the existing -G/--gui-mode option). Restored as
-S/--use-edit-save. Updated mbedit's man page to document every
long-option equivalent in both the synopsis and options list, matching
the format already used by the getopt_long-converted src/utilities
programs, and fixed a duplicate --verbose/-V entry found in the
process.</p>
<p>Program mbtrnpp: Added a first man page for this utility, which
previously had no documentation at all. mbtrnpp is an optional real-time
preprocessor, normally run unattended aboard an AUV or other survey
platform, that reads multibeam bathymetry (from a datalist, a single
swath file, or a live network socket), applies automated cleaning and
downsampling, and passes the result to an embedded terrain relative
navigation (TRN) process; it is built only when MB-System is configured
with TRN support (--enable-mbtrn with autotools, or -DbuildTRN=ON with
CMake, both of which are the default). The new man page documents the
synopsis, description, and every command-line/configuration-file option
(input/output specifiers, TRN map/filter/ convergence settings,
reinitialization and decimation options, and the mb-out/trn-out network
output mnemonics), drawn from the option-parsing code in mbtrnpp.c and
the existing README-mbtrnpp.md and mbtrnpp-cfg.example documentation,
along with usage examples. The page is installed by
src/man/man1/CMakeLists.txt only when the buildTRN CMake option is
enabled, and by src/man/man1/Makefile.am/Makefile.in only when the
BUILD_MBTRNUTILS automake conditional is set, matching the pattern
already used for the deprecated-program man pages so that the page is
never installed alongside a build that lacks the program itself.</p>
<p>The bugs described above, and the mbtrnpp man page, were identified
and written with the assistance of the AI coding assistant Claude Sonnet
5 (Anthropic, model claude-sonnet-5), operating as Claude Code under
developer supervision and review.</p>
<h4 id="583beta15-july-26-2026">5.8.3beta15 (July 26, 2026)</h4>
<p>This release was botched due to a faulty merge of conflicting pull
requests. All changes intended for this release are described above for
5.8.3beta16.</p>
<h4 id="583beta14-july-6-2026">5.8.3beta14 (July 6, 2026)</h4>
<p>Programs mbedit, mbnavedit, mbvelocitytool, mbgrdviz, mbeditviz,
mbnavadjust: updated Motif GUI code to eliminate two deprecated
functions, replacing XmFileSelectionBoxGetChild() with XtNameToWidget()
and replacing XmStringGetLtoR() with XmStringUnparse(). This appears to
be necessary for the Motif code to work on MacOs Tahoe with
prerequisites installed via MacPorts.</p>
<h4 id="583beta13-june-18-2026">5.8.3beta13 (June 18, 2026)</h4>
<p>Format MBF_KEMKALL (261): Fixed support for platform files used for
preprocessing.</p>
<p>Format MBF_EM710RAW (58): Added support for *.all files associate
with the HISAS sonar from Kongsberg.</p>
<p>Programs mbpreprocess and mbprocess: Added support for merging
navigation from Kongsberg Navlab software that is commonly used for
Hugin AUV data processing.</p>
<p>Programs mbnavlab2fnv and mbfnv2navlab: Added tools that translate
between navlab_smooth.bin and fnv files.</p>
<p>Programs mbnavadjust and mbnavadjustmerge: Fixed problems with new
and merged project files resulting from treating surveys and blocks of
continuous data separately.</p>
<p>Program mbmakedatalist: Compiled C version of macro
mbm_makedatalist</p>
<p>Library mbtrnav/gctp: Added modern function definitions to function
pointer arrays.</p>
<p>Program mbphotomosaic: Fix bug in which if one photo of a stereo pair
is dropped, the other photo is not used.</p>
<p>Program mbnavadjust: Changed so that surveys can be imported as a
single piece even if there are time breaks between some of the
files.</p>
<p>Format MBF_3DWISSL2 (id 234): Add kluge to deal with WiSSL2 lidar
bathymetry needing additional correction.</p>
<h4 id="583beta12-january-7-2026">5.8.3beta12 (January 7, 2026)</h4>
<p>CMake build system: Extended to handle complications of MacOs Tahoe.
Building the graphical tools in MB-System on MacOs has been complicated
for a number of years because of the requirement for X11/Motif and also,
for programs mbgrdviz, mbeditviz, and mbnavadjust, OpenGL and GLX. For
MacOs versions Sequoia (15) and earlier, the only way to successfully
build and run MB-System has been to install all of the prerequisite
packages using the MacPorts package manager. For reasons that have never
been understood, the MB-System graphical programs failed to run
correctly when built with prerequisites installed through the
alternative package managers Homebrew and Fink. This situation changes
with MacOs Tahoe because now the MB-System graphical programs fail when
prerequisites are installed through MacPorts, but succeed when the
prerequisites are installed through Homebrew. This update to the build
system handles the differences between the two MacOs scenarios (before
Tahoe vs Tahoe or later). The installation documentation on the
MB-System website will be updated to reflect the necessity of using
Homebrew for installations on MacOs Tahoe. A significant issue with all
X11 programs running on MacOs Tahoe so far is that when windows are
resized, the GUI elements are not refreshed properly, and parts of the
GUI wind up overwritten in solid black. Hopefully this will be fixed in
a new version of the X11 server XQuartz. In the meantime, minimizing the
program window using the middle (yellow) button on the upper left of the
window (or the command-M shortcut), and then restoring that window by
clicking on it's icon in the dock will properly refresh the GUI
graphics.</p>
<p>Program mbgrd2gltf: Continued updates to this tool for translating
gridded topography to Graphics Library Transmission Format (GLTF) files
that can be visualized by GLTF viewers.</p>
<h4 id="583beta11-december-27-2025">5.8.3beta11 (December 27, 2025)</h4>
<p>Formats 56 (MBF_EM300RAW) and 57 (MBF_EM300MBA): Fixed erroneous
calculation of a large sensordepth value by mbprocess when the draft of
a surface vessel has not been defined.</p>
<h4 id="583beta10-december-22-2025">5.8.3beta10 (December 22, 2025)</h4>
<p>Program mbbackangle: A skipping existing feature implemented in
beta04 had a small error in the source code that made it not work as
intended. This release contains a bug fix to correct that behavior.</p>
<h4 id="583beta09-december-4-2025">5.8.3beta09 (December 4, 2025)</h4>
<p>Program mbnavadjustmerge: Fixed options --unset-tie,
--unset-ties-file, --unset-ties-survey, --unset-ties-by-survey,
--unset-ties-block, --unset-ties-all.</p>
<p>Program mbbackangle: A skipping existing feature implemented in
beta04 had a small error in the source code that made it not work as
intended. This release contains a bug fix to correct that behavior.</p>
<h4 id="583beta08-november-16-2025">5.8.3beta08 (November 16, 2025)</h4>
<p>Programs mbedit and mbeditviz: Now display dual swath Kongsberg
multibeam data in the kmall format (id 261) with two separate
acrosstrack profiles. As before the two profiles are associated with a
single ping cycle and set of datagrams.</p>
<p>Format MBF_3DWISSL2 (id 234): Updates to handle the evolving
representation for the 3D at Depth 2nd generation Wide Swath Subsea
Lidar (WiSSL2)</p>
<p>Programs mbphotomosaic, mbgetphotocorrection, and mbphotogrammetry:
Augmented to handle seafloor photographs that have already been
rectified (corrected for distortion). This capability has not been fully
tested at this point.</p>
<h4 id="583beta07-october-22-2025">5.8.3beta07 (October 22, 2025)</h4>
<p>Program mbeditviz: Fixed display of swath width when navigation is
selected in the survey view.</p>
<p>Format 234 (MBF_3DWISSL2): Supports data from new 3D at Depth 2nd
Generation Wide swath Subsea Lidar (WiSSL2).</p>
<p>Program mbpreprocess: Added option attitude-zero-heave to zero heave
values in attitude data to be merged with survey data. The immediate use
is for integration of Exail Phins C7 navigation and attitude data with
multibeam data, all collected on a submerged AUV for which the platform
depth is defined by a pressure sensor rather than the heave output by
the INS.</p>
<p>Programs mbgrdviz, mbeditviz, mbnavadjust: Fixed the mouse button
description for Rotate View mode so that the right button is properly
labeled as zoom rather than exaggeration.</p>
<h4 id="583beta06-october-1-2025">5.8.3beta06 (October 1, 2025)</h4>
<p>GMT integration: Fixed compiler directives insuring that the GMT
header file gmt_dev.h does not implicitly include a glib header file not
needed by MB-System.</p>
<h4 id="583beta05-september-30-2025">5.8.3beta05 (September 30,
2025)</h4>
<p>GMT grid i/o functions (src/mbaux/mb_readwritegrd.c): Added compiler
directives insuring that the GMT header file gmt_dev.h does not
implicitly include a glib header file not needed by MB-System.</p>
<p>GMT module mbcontour: Added compiler directives insuring that the GMT
header file gmt_dev.h does not implicitly include a glib header file not
needed by MB-System.</p>