chiark / gitweb /
Initial import.
[rocl] / elite-find
1 #! /usr/bin/tclsh
2
3 package require "elite" "1.0.0"
4
5 proc ok {s vv expr} {
6   global argv0
7   set ip [interp create]
8   foreach v $vv {
9     upvar 1 $v var
10     if {[array exists var]} {
11       foreach {k d} [array get var] {
12         $ip eval [list set ${v}($k) $d]
13       }
14     } else {
15       $ip eval [list set $v $var]
16     }
17   }
18   elite-worldinfo p $s
19   foreach {k v} [array get p] {
20     $ip eval [list set $k $v]
21   }
22   if {[catch { $ip eval [list expr $expr] } rc]} {
23     puts stderr "$argv0: error in expression: $rc"
24     exit 1
25   }
26   interp delete $ip
27   return $rc
28 }
29
30 set g $galaxy1
31 set d 70
32 for {set i 0} {$i < [llength $argv]} {incr i} {
33   set a [lindex $argv $i]
34   switch -glob -- $a {
35     "-g" {
36       incr i
37       set a [lindex $argv $i]
38       set g [parse-galaxy-spec $a]
39       if {[string equal $g ""]} {
40         puts stderr "$argv0: bad galaxy string `$a'"
41         exit 1
42       }
43       destructure {. g} $g
44     }
45     "--" {
46       incr i
47       break
48     }
49     "-*" {
50       puts stderr "usage: $argv0 \[-g GALAXY\] \[EXPR\]"
51       exit 1
52     }
53     default {
54       break
55     }    
56   }
57 }
58
59 set expr {}
60 if {$i == [llength $argv] - 1} {
61   set expr [lindex $argv $i]
62 } elseif {$i != [llength $argv]} {
63   puts stderr "usage: $argv0 \[-g GALAXY\] \[EXPR\]"
64   exit 1
65 }
66 set ww [worldinfo $g]
67 foreach {s x y} $ww {
68   if {[string equal $expr ""] || [ok $s {} $expr]} {
69     puts [world-summary $s]
70   }
71 }