3 # $Id: elite-map,v 1.4 2003/03/07 00:41:46 mdw Exp $
5 package require "elite" "1.0.0"
7 set syms "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
10 if {$i < [string length $syms]} {
11 return [string index $syms $i]
13 set hi [expr {$i / [string length $syms]}]
14 set lo [expr {$i % [string length $syms]}]
15 return [string index $syms $hi][string index $syms $lo]
18 proc show-map {asp wx wy ww {n {}} {p {}}} {
27 if {[llength $n] == 1} {
30 lappend lmagic $fancy($w) $w
34 if {![info exists fancy($w)]} {
35 set fancy($w) "*[symbol $i]"
36 lappend lmagic $fancy($w) $w
43 if {![info exists fancy($w)]} {
44 set fancy($w) "+[symbol $i]"
45 lappend lpath $fancy($w) $w
50 if {$x < $minx} { set minx $x}
51 if {$y < $miny} { set miny $y}
52 if {$x > $maxx} { set maxx $x}
53 if {$y > $maxy} { set maxy $y}
55 set dx [expr {$maxx - $minx}]
56 set dy [expr {$maxy - $miny}]
57 if {$dx == 0} { set dx 1 }
58 if {$dy == 0} { set dy 1 }
60 set sc [expr {$wx/double($dx)}]
61 if {$dy * $sc/$asp > $wy} {
62 set sc [expr {$wy * $asp/double($dy)}]
66 set gx [expr {int(($x - $minx) * $sc + 0.5)}]
67 set gy [expr {int(($y - $miny) * $sc/$asp + 0.5)}]
68 lappend gw [list $s $gx $gy]
71 set pw [lsort -index 1 -integer -increasing $gw]
72 set pw [lsort -index 2 -integer -increasing $pw]
77 destructure {s px py} $w
79 puts -nonewline [string repeat "\n" [expr {$py - $y}]]
84 puts -nonewline [string repeat " " [expr {$px - $x}]]
88 if {[info exists fancy($s)]} {
96 incr x [string length $sy]
99 return [list $lmagic $lpath $lmain]
102 proc show-key {l {n {}}} {
105 elite-worldinfo p [lindex $n 0]
108 elite-worldinfo pp $s
109 set out [format "%2s %s" $sy [world-summary $s]]
111 append out [format " (%.1f LY)" \
112 [expr {[elite-distance $p(x) $p(y) $pp(x) $pp(y)]/10.0}]]
125 set usage "usage: $argv0 \[-qv\] \[-g GAL\] \[-d DIST\] \[-w WEIGHT\]\n\t\[-W WD,HT\] \[-a ASP\] \[PLANET ...\]"
126 for {set i 0} {$i < [llength $argv]} {incr i} {
127 set a [lindex $argv $i]
131 set a [lindex $argv $i]
132 set g [parse-galaxy-spec $a]
133 if {[string equal $g ""]} {
134 puts stderr "$argv0: bad galaxy string `$a'"
141 set d [expr {int([lindex $argv $i] * 10)}]
145 if {![regexp {^(\d+),(\d+)$} [lindex $argv $i] . wx wy]} {
146 puts stderr "$argv0: bad window size string"
152 set a [lindex $argv $i]
153 set weight "weight-$a"
154 if {[lsearch -exact [info commands "weight-*"] $weight] == -1} {
155 puts stderr "$argv0: unknown weight function `$a'"
156 puts stderr "$argv0: I know [info commands weight-*]"
162 set asp [lindex $argv $i]
184 set p [lrange $argv $i end]
185 set ww [elite-galaxylist $g]
192 if {![string equal $weight ""]} { elite-adjacency adj $ww $d }
195 set s [parse-planet-spec $g $a]
196 if {[string equal $s ""]} {
197 puts stderr "$argv0: unknown planet `$a'"
203 if {![string equal $weight ""]} {
204 set home [lindex $n 0]
205 foreach w [lrange $n 1 end] {
206 destructure {p .} [shortest-path adj $home $w $weight]
209 "$argv0: no route from [worldname $home] to [worldname $w]"
221 foreach p [concat $n $rt] {
222 elite-worldinfo ii $p
223 if {$ii(x) < $x0} { set x0 $ii(x) }
224 if {$ii(y) < $y0} { set y0 $ii(y) }
225 if {$ii(x) > $x1} { set x1 $ii(x) }
226 if {$ii(y) > $y1} { set y1 $ii(y) }
228 set x0 [expr {$x0 - $d - 5}]
229 set y0 [expr {$y0 - $d - 5}]
230 set x1 [expr {$x1 + $d + 5}]
231 set y1 [expr {$y1 + $d + 5}]
233 foreach {p x y} $ww {
234 if {$x >= $x0 && $y >= $y0 && $x <= $x1 && $y <= $y1} {
239 destructure {lmagic lpath lmain} [show-map $asp $wx $wy $w $n $rt]
245 if {[string equal $weight ""]} {