#! /usr/local/bin/wish

source [file dirname [file dirname [file dirname $argv0]]]/lib/require.tcl

set _program(name)    "BackStage"
set _program(version) 2.0
set _program(id)      "$_program(name) v$_program(version)"

wm withdraw .

proc _driver(HandleError) {} {}
proc _driver(Begin) {movie} {}
proc _driver(End) {movie} {}
proc _driver(BeginReceive) {} {}
proc _driver(EndReceive) {} {}

Require config.tcl
Require user.tcl

Require input.tcl
Require status.tcl

Require error.tcl

proc StageDoor {args} {eval _command(Print) $args}
proc Shell {} \
  {global _program; Require shell.tcl; TclShell "$_program(id): Shell"}

Require frame.tcl
Require script.tcl
Require loop.tcl
Require scene.tcl
Require mpeg.tcl
Require animGIF.tcl
Require video.tcl

Require $_program(name).tcl

_user Init

_input(StartHandler)
StageDoor {Message Select}
StageDoor {Ready}


proc _program(Begin) {{movie 1}} {
  global _file
  cd $_file(pwd)
  _user Begin
  _driver(Begin) $movie
  _scene(Begin)
  _frame(Begin)
  _mpeg(Begin)
  _animGIF(Begin)
  _video(Begin)
  _loop(Begin)
  _script(Begin)
  _user begin
}

proc _program(End) {{movie 1}} {
  _user end
  _driver(End) $movie
  _video(End)
  _animGIF(End)
  _mpeg(End)
  _user End
}

proc _movie(Begin) {} {
  global _movie
  _status(Message) "Movie: $_movie(name)"
}

proc _movie(End) {} {
  global _movie
  _status(Message) "================================"
  _status(Message) "Movie complete"
  _command(Send) StageManager \
    [list _execute(Done) $_movie(name) [_scene(End)]]
}

proc _program(Receive) {script} {
  global _status
  if {!$_status(running)} {
    _driver(BeginReceive)
    _program(Begin) 0
  }
  set result [_status(Receive) $script]
  if {!$_status(running)} {
    _program(End) 0
    _driver(EndReceive)
  }
  return $result
}

_user Ready

_status(Run) {
  _program(Begin)
  _movie(Begin)
  eval $_program(script)
  _movie(End)
  _program(End)
} _driver(HandleError)
