chiark / gitweb /
Release 1.1.6.
[rocl] / elite-prices
index 07ad778319da010d61d6ffc73480e770187847c4..2e555f2f2fb091b587296858f88645ed1729be39 100755 (executable)
@@ -1,14 +1,21 @@
 #! /usr/bin/tclsh
 #
-# $Id: elite-prices,v 1.4 2003/03/07 00:41:46 mdw Exp $
+# $Id: elite-prices,v 1.5 2003/03/09 23:45:02 mdw Exp $
 
 package require "elite" "1.0.1"
 
+set i 0
+set allreps {}
 foreach-world $galaxy1 p {
-  set econame $eco($p(economy))
-  if {[info exists rep($econame)]} { continue }
-  set rep($econame) $p(seed)
+  set e $eco($p(economy))
+  set s $p(seed)
+  if {[info exists rep($e)]} { continue }
+  set rep($e) $s
+  lappend allreps $s
+  incr i
+  if {$i == 8} { break }
 }
+set rep(avg) ""
 unset p
 
 set from $rep(poor-agri)
@@ -39,40 +46,21 @@ proc get-world {p} {
   return $s
 }
 
-proc check-profits {from to} {
-  global products
-  set np [expr {[llength $products]/2}]
-  puts -nonewline stderr "Thinking: \[[string repeat { } 32]\] "
-  puts -nonewline stderr "\[[string repeat { } $np]\] "
-  puts -nonewline stderr "\rThinking: \["
-  flush stderr
-  foreach {a s} [list l $from e $to] {
-    for {set f 0} {$f < 256} {incr f} {
-      elite-market m $s $f
-      foreach {t p} $products { destructure [list ${a}($f:$t) .] $m($t) }
-      if {($f & 15) == 15} { puts -nonewline stderr "."; flush stderr }
+proc get-prices {ss arr} {
+  global products allreps
+  upvar \#0 $arr a
+  foreach {t p} $products { set l($t) {} }
+  foreach s [if {[string equal $ss ""]} { set allreps } { set ss }] {
+    if {![string equal $s ""]} {
+      for {set i 0} {$i < 256} {incr i} {
+       elite-market m $s $i
+       foreach {t p} $products { lappend l($t) [lindex $m($t) 0] }
+      }
     }
   }
-  puts -nonewline stderr "\] \["
-  flush stderr
-  set r {}
   foreach {t p} $products {
-    set ll {}
-    set ee {}
-    for {set f 0} {$f < 256} {incr f} {
-      lappend ll $l($f:$t)
-      lappend ee $e($f:$t)
-    }
-    destructure {llo lavg lhi} [loavghi $ll]
-    destructure {elo eavg ehi} [loavghi $ee]
-    lappend r [list $t \
-       [expr {$elo - $lhi}] \
-       [expr {int($eavg - $lavg)}] \
-       [expr {$ehi - $llo}]]
-    puts -nonewline stderr "."; flush stderr
+    set a($t) [loavghi $l($t)]
   }
-  puts stderr "\] done"
-  return $r
 }
 
 set g $galaxy1
@@ -120,11 +108,21 @@ for {set i 0} {$i < [llength $argv]} {incr i} {
 set argv [lrange $argv $i end]
 switch -exact -- [llength $argv] {
   0 { }
+  1 {
+    set w [get-world [lindex $argv 0]]
+    get-prices $w pp
+    foreach {t p} $products {
+      destructure {min avg max} $pp($t)
+      puts [format "%-12s %5.1f %5.1f %5.1f" $t \
+         [expr {$min/10.0}] [expr {$avg/10.0}] [expr {$max/10.0}]]
+    }
+    exit
+  }
   2 {
-    destructure {fp tp} $argv
-    set from [get-world $fp]
-    set to [get-world $tp]
-    foreach {p s} [list $fp $from $tp $to] {
+    destructure {f t} $argv
+    set from [get-world $f]
+    set to [get-world $t]
+    foreach {p s} [list $f $from $t $to] {
       if {[string equal $s ""]} {
        puts stderr "$argv0: bad planet spec `$p'"
        exit 1
@@ -137,12 +135,23 @@ switch -exact -- [llength $argv] {
   }
 }
 
-set pp [check-profits $from $to]
+get-prices $from fp
+get-prices $to tp
+set pp {}
+foreach {t p} $products {
+  destructure {flo favg fhi} $fp($t)
+  destructure {tlo tavg thi} $tp($t)
+  lappend pp [list $t \
+      [expr {$tlo - $fhi}] \
+      [expr {int($tavg - $favg)}] \
+      [expr {$thi - $flo}]]
+}
+
 if {$sortcol} {
   set pp [lsort -index $sortcol -real -decreasing $pp]
 }
 foreach i $pp {
   destructure {t min avg max} $i
-  puts [format "%-15s %6.1f %5.1f %5.1f" $t \
+  puts [format "%-12s %6.1f %5.1f %5.1f" $t \
       [expr {$min/10.0}] [expr {$avg/10.0}] [expr {$max/10.0}]]
 }