+ }
+
+ parser-control-failed-core .cp.ctrl.notes notes \
+ white blue 0 \
+ $tiny \
+ "[llength $note_infos] warning(s);\
+ $nmissing vessel(s) missing" \
+ "Full description of warnings and missing vessels:" \
+ $infodata
+}
+
+#---------- vessel properties ----------
+
+proc vesselclasses-init {} {
+ global vc_game2code vc_code2abbrev vc_code2full vc_codes
+ set vcl {
+ smsloop am sl Sloop
+ lgsloop bm ct Cutter
+ dhow cm dh Dhow
+ longship dm ls Longship
+ baghlah em bg Baghlah
+ merchbrig fm mb {Merchant Brig}
+ warbrig gm wb {War Brig}
+ xebec hm xe Xebec
+ warfrig im wf {War Frigate}
+ merchgal jm mg {Merchant Galleon}
+ grandfrig km gf {Grand Frigate}
+ }
+ set vc_codes {}
+ foreach {game code abbrev full} $vcl {
+ lappend vc_codes $code
+ set vc_game2code($game) $code
+ set vc_code2abbrev($code) $abbrev
+ set vc_code2full($code) $full
+ }
+}
+
+proc code2abbrev-lock {lockown} {
+ manyset [split $lockown ""] lock notown
+ append abbrev [lindex {* + -} $lock]
+ append abbrev [lindex {= - ?} [regsub {\D} $notown 2]]
+}
+
+proc code2abbrev {code} {
+ global vc_code2abbrev
+
+ manyset [split $code _] inport class subclass lockown xabbrev
+
+ set abbrev {}
+ append abbrev [lindex {? {}} $inport]
+ append abbrev $vc_code2abbrev($class)
+ append abbrev $subclass
+ append abbrev [code2abbrev-lock $lockown]
+ append abbrev $xabbrev
+
+ debug "CODE2ABBREV $code $abbrev"
+ return $abbrev
+}
+
+proc show-report-decode {code} {
+ global vc_code2full
+
+ manyset [split $code _] inport classcode subclass lockown xabbrev
+ manyset [split $lockown ""] lock notown
+
+ report-set inport [lindex {{At Sea} {In port}} $inport]
+ report-set class $vc_code2full($classcode)
+
+ switch -exact $subclass {
+ {} { report-set subclass {Ordinary} }
+ F { report-set subclass {"Frost class"} }
+ default { report-set subclass "Subclass \"$subclass\"" }
+ }
+
+ report-set lock [lindex {
+ {Battle ready} {Unlocked} {Locked}
+ } $lock]
+
+ switch -exact $notown {
+ 0 { report-set own "Yours" }
+ 1 { report-set own "Other pirate's" }
+ U { report-set own "Owner not known" }
+ M { report-set own "Missing from notes" }
+ default { report-set own "?? $notown" }
+ }
+
+ if {[string length $xabbrev]} {
+ report-set xabbrev "Notes flags: $xabbrev"
+ } else {
+ report-set xabbrev "No flags in notes"
+ }
+}
+
+#---------- filtering ----------
+
+set filters {}
+
+proc filter-values/size {} { global vc_codes; return $vc_codes }
+proc filter-map/size {code} { upvar #0 vc_code2abbrev($code) abb; return $abb }
+proc filter-default/size {code} { return 1 }
+proc filter-says-yes/size {codel} {
+ set sizecode [lindex $codel 1]
+ upvar #0 filter_size($sizecode) yes
+ return $yes
+}
+
+proc filter-values/lockown {} {
+ foreach lv {0 1 2} {
+ foreach ov {0 1 X} {
+ lappend vals "$lv$ov"