chiark / gitweb /
parameterise vessel class and subclass info ready for remote fetching; no behavioural...
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Wed, 21 Jul 2010 21:25:05 +0000 (22:25 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Wed, 21 Jul 2010 21:25:05 +0000 (22:25 +0100)
yarrg/where-vessels

index af77cba..c5ec9b0 100755 (executable)
@@ -246,9 +246,7 @@ proc display-note-infos {} {
 
 #---------- vessel properties ----------
 
-proc vesselclasses-init {} {
-    global vc_game2code vc_code2abbrev vc_code2full vc_codes
-    set vcl {
+set vessel_class_info {
        smsloop         am      sl      Sloop
        lgsloop         bm      ct      Cutter
        dhow            cm      dh      Dhow
@@ -261,9 +259,23 @@ proc vesselclasses-init {} {
        merchgal        jm      mg      {Merchant Galleon}
        warfrig         im      wf      {War Frigate}
        grandfrig       km      gf      {Grand Frigate}
-    }
+}
+
+set vessel_subclass_info {
+       celtic   E      {Emerald class}
+       icy      F      {Frost class}
+       rogue    R      {Rogue class}
+       verdant  V      {Verdant class}
+       inferno  I      {Inferno class}
+}
+
+proc vesselclasses-init {} {
+    global vc_game2code vc_code2abbrev vc_code2full vc_codes
+    global vessel_class_info vessel_subclass_info
     set vc_codes {}
-    foreach {game code abbrev full} $vcl {
+    foreach {game code abbrev full} $vessel_class_info {
+       if {![regexp {^[a-z][a-z]$} $code code]} { error "bad code" }
+       if {![regexp {^[a-z][a-z]$} $abbrev abbrev]} { error "bad abbrev" }
        lappend vc_codes $code
        set vc_game2code($game) $code
        set vc_code2abbrev($code) $abbrev
@@ -271,6 +283,16 @@ proc vesselclasses-init {} {
        load-icon $abbrev
     }
 
+    global vsc_code2report
+    global vsc_game2code
+    set vsc_game2code(null) {}
+    set vsc_code2report() Ordinary
+    foreach {game code full} $vessel_subclass_info {
+       if {![regexp {^[A-Z]$} $code code]} { error "bad code" }
+       set vsc_game2code($game) $code
+       set vsc_code2report($code) $full
+    }
+
     load-icon atsea
     foreach a {battle borrow dot} {
        foreach b {ours dot query} {
@@ -378,14 +400,11 @@ proc show-report-decode {code} {
     report-set inport [lindex {{At Sea} {In port}} $inport]
     report-set class $vc_code2full($classcode)
 
-    switch -exact $subclass {
-       {} { report-set subclass {Ordinary} }
-       E { report-set subclass {Emerald class} }
-       F { report-set subclass {Frost class} }
-       R { report-set subclass {Rogue class} }
-       V { report-set subclass {Verdant class} }
-       I { report-set subclass {Inferno class} }
-       default { report-set subclass "Subclass \"$subclass\"" }
+    upvar #0 vsc_code2report($subclass) subclass_report
+    if {[info exists subclass_report]} {
+       report-set subclass $subclass_report
+    } else {
+       report-set subclass "Subclass \"$subclass\""
     }
 
     report-set lock [lindex {
@@ -584,15 +603,12 @@ proc vessel {vin} {
     if {![info exists class]} { errexpect-error "unexpected vesselClass"}
     lappend codel $class
 
-    set subclass [errexpect-arrayget vi vesselSubclass]
-    switch -exact $subclass {
-       null            { lappend codel {} }
-       celtic          { lappend codel E }
-       icy             { lappend codel F }
-       rogue           { lappend codel R }
-       verdant         { lappend codel V }
-       inferno         { lappend codel I }
-       default         { lappend codel ($subclass) }
+    set gamesubclass [errexpect-arrayget vi vesselSubclass]
+    upvar #0 vsc_game2code($gamesubclass) subclass
+    if {[info exists subclass]} {
+       lappend codel $subclass
+    } else {
+       lappend codel ($gamesubclass)
     }
 
     switch -exact [errexpect-arrayget vi isLocked]/[ \