#compdef dmesg

local args

case $OSTYPE in
  linux*) args=( -S --  ) ;;
  darwin*|dragonfly*|*bsd*)
    args=(
      '-M[extract values from core]:core file:_files'
      '-N[extract name list from kernel image]:system:_files'
    )
  ;|
  dragonfly*|freebsd*)
    args=(
      '-a[show all data, including syslog and console]'
      '-c[clear the buffer after printing]'
    )
  ;|
  openbsd*)
    args+=(
      '-s[show console message buffer instead]'
    )
  ;;
  dragonfly*)
    args+=(
      '\*-f[follow buffer, displaying new data as it arrives]'
      '-n[use specified kernel core]:number'
    )
  ;;
esac

_arguments -s $args
