#!/bin/sh
# the next line restarts using tclsh8.2 \
exec tclsh8.2 "$0" "$@"

set usage "x3arth \[<satellite> \[-c \[file\] | -b\]\] \n\
<satellite> : GMS-5, FY-2, GOES-8, GOES-9, GOES-10 or METEOSAT-7\n\
-c          : load current image from disk\n\
-c file     : copy current image to file\n\
-b          : restore previous image\n\
-h          : send me an email if you really want to know...\n"

if {![lsearch $argv {-h}] || $argc>3} {
  puts stdout $usage
  exit 0
}
package require http
http::config -useragent x3arth

set NASA {http://rsd.gsfc.nasa.gov/goesg/earth/Weather}
array set url "GMS-5 $NASA/GMS-5/jpg/vis/4km/0latest.jpg FY-2 $NASA/FY-2/jpg/vis/4km/0latest.jpg \
 GOES-8 $NASA/GOES-8/jpg/vis/4km/0latest.jpg GOES-9 $NASA/GOES-9/jpg/vis/4km/0latest.jpg \
 GOES-10 $NASA/GOES-10/jpg/vis/4km/0latest.jpg \
 METEOSAT-7 $NASA/METEOSAT-7/gif/vis/5km/0latest.gif"

set sat [lindex $argv 0]
if {$sat==""} {set sat {GMS-5}}
if {[catch {if {$url($sat)==""} {exit} }]} {
   puts stdout "$sat unknown.\nMust be one of GMS-5, FY-2, GOES-8, GOES-9, GOES-10, METEOSAT-7"
   exit 1
}
catch {exec mkdir -p /tmp/$sat}
set tname "/tmp/$sat/0latest.[lindex [split $url($sat) .] end]"
set fname "/tmp/$sat/latest.[lindex [split $url($sat) .] end]"

proc http_copy {url file} {
   set token [http::geturl $url -channel [set out [open $file w]] -progress http_progress]
   if {$out!=""} {close $out}
   puts stdout ""
   upvar #0 $token state
   foreach {name value} $state(meta) {
      if {[regexp -nocase ^location$ $name]} {
         return [http_copy [string trim $value] $file]
      }
   }
   return $token
}

proc http_progress {args} {
   puts -nonewline stdout \#
   flush stdout
}

if {$argc>=2} {
  if {[lindex $argv 1]=={-b}} {
    exec mv $fname.bak $fname
  } elseif {[lindex $argv 1]!={-c}} {
    puts stdout "-b restore previous image\n-c display local image"
    exit 1
  } elseif {$argc==3} {
    exec cp $fname [lindex $argv 2]
    exit 0
  }
  set token previous
} else {
  set token {}
  catch {set token [http_copy $url($sat) $tname]}
  if {$token!=""} { 
    upvar #0 $token state
    if {[expr [lindex $state(http) 1]/100]==2} {
      catch {exec mv $fname $fname.bak}
      exec mv $tname $fname
    } else {puts stdout "Cant get the latest image." ; set token previous}
  } else {puts stdout "Cant reach website." ; set token previous}
}

if [file exists $fname] {
  if {$token=={previous}} {puts stdout "Loading previous image..."}
  exec xsetroot -solid black
  exec xv $fname -quit -iconic -rmode 5 -viewonly
  puts stdout "Thanks to the NASA and University of Hawaii."   
  puts stdout "x3arth (C) 1999 Luc Deschenaux <lcd@gkb.com>"
}


