chiark / gitweb /
Initial import.
[rocl] / elite-reach
... / ...
CommitLineData
1#! /usr/bin/tclsh
2
3package require "elite" "1.0.0"
4
5proc reach {dist seed} {
6 set ww [worldinfo $seed]
7 puts -nonewline stderr "\[computing adjacency table..."
8 adjacency $ww a $dist
9 puts stderr " done\]"
10 puts -nonewline stderr "\[painting..."
11 flush stdout
12 foreach {s x w} $ww { set p($s) 1 }
13 set pp {}
14 while 1 {
15 set ps [array startsearch p]
16 if {![array anymore p $ps]} { array donesearch p $ps; break }
17 set cc [array nextelement p $ps]
18 array donesearch p $ps
19 unset p($cc)
20 set go 1
21 while {$go} {
22 set go 0
23 foreach c $cc {
24 foreach w $a($c) {
25 if {[info exists p($w)]} {
26 unset p($w)
27 lappend cc $w
28 set go 1
29 }
30 }
31 }
32 }
33 lappend pp $cc
34 }
35 puts stderr " done\]\n"
36 foreach cc $pp {
37 set de 1
38 set l {}
39 foreach c $cc {
40 elite-worldinfo i $c
41 if {$i(techlevel) >= 10} {
42 set de 0
43 }
44 lappend l [world-summary $i(seed)]
45 }
46 foreach n $l {
47 if {$de} { append n " *" }
48 puts $n
49 }
50 puts ""
51 }
52}
53
54if {[llength $argv] == 0} {
55 set argv {1 2 3 4 5 6 7 8}
56}
57set gg {}
58set d 70
59for {set i 0} {$i < [llength $argv]} {incr i} {
60 set a [lindex $argv $i]
61 switch -glob -- $a {
62 "-d" {
63 incr i
64 set d [expr {[lindex $argv $i] * 10}]
65 }
66 "-*" {
67 puts stderr "usage: $argv0 \[-d DIST\] \[GALAXY ...\]"
68 exit 1
69 }
70 default {
71 set g [parse-galaxy-spec $a]
72 if {[string equal $g ""]} {
73 puts stderr "$argv0: bad galaxy spec `$a'"
74 exit 1
75 }
76 destructure {ng g} $g
77 lappend gg $d $ng $g
78 }
79 }
80}
81foreach {d ng g} $gg {
82 puts "*** GALAXY $ng ***"
83 reach $d $g
84}