#compdef script scriptreplay

local args hlp="-h --help -V --version"

if [[ $service = scriptreplay ]]; then
  _arguments -S -s \
    "(1 -t --timing $hlp)"{-t+,--timing=}'[specify file containing timing output]:timing file:_files' \
    "(2 -s --typescript $hlp)"{-s+,--typescript=}'[specify file containing terminal output]:typescript file:_files' \
    "(3 -d --divisor $hlp)"{-d+,--divisor=}'[speed up replay]:factor' \
    "(-m --maxdelay $hlp)"{-m+,--maxdelay=}'[set maximum delay between updates]:delay (seconds)' \
    '(- *)'{-h,--help}'[display help information]' \
    '(- *)'{-V,--version}'[display version information]' \
    "(-t --timing $hlp):timing file:_files" \
    "(-s --typescript $hlp):typescript file:_files" \
    "(-d --divisor $hlp): :_guard '[0-9.]#' 'timing divisor'"
  return
fi

case $OSTYPE in
  linux*)
    args=( -S
      "(-a --append $hlp)"{-a,--append}'[append output]'
      "(-c --command $hlp)"{-c,--command=}'[run specified command instead of a shell]:command:_cmdstring'
      "(-e --return $hlp)"{-e,--return}'[return exit status of the child process]'
      "(-f --flush $hlp)"{-f,--flush}'[flush output after each write]'
      "($hlp)--force[use output file even when it is a link]"
      '(-o --output-limit)'{-o+,--output-limit=}'[terminate if output files exceed specified size]:size (bytes)'
      "(-q --quiet $hlp)"{-q,--quiet}'[be quiet]'
      "(-t --timing $hlp)"{-t-,--timing=-}'[output timing data]::timing file:_files'
      '(- 1)'{-h,--help}'[display help information]'
      '(- 1)'{-V,--version}'[display version information]'
    )
  ;;
  darwin*|dragonfly*|netbsd*|freebsd*)
    args=(
      '-q[be quiet: suppress display of starting and ending lines]'
    )
  ;|
  darwin*|netbsd*|freebsd*)
    args+=(
      '(-a -r -k)-d[suppress sleeps when playing back a session]'
      '(-a -r -k -t)-p[play back a recorded session]'
      '(-d -p)-r[record a session with input, output and timing data]'
    )
  ;|
  netbsd*|openbsd*)
    args+=(
      '-c[run specified command instead of a shell]:command:_cmdstring'
    )
  ;|
  netbsd*)
    args+=( '-f[flush output after each write]' )
  ;|
  freebsd*)
    args+=(
      '-f[use filemon(4)]'
    )
  ;|
  darwin*|dragonfly*|freebsd*)
    args+=(
      '-t+[specify interval of data flushing]:interval (seconds)'
      '-k[log keys sent to the program as well as output]'
      '*:::arguments: _normal'
    )
  ;|
  darwin*|freebsd*)
    args+=( '-F[send output to specified named pipe]:fifo:_files -g "*(p)"' )
  ;|
  *)
    args+=(
      '(-p -d)-a[append output]'
    )
  ;;
esac

_arguments -s $args \
  "($hlp):typescript file:_files"
