summary refs log tree commit diff
path: root/Completion/Unix
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix')
-rw-r--r--Completion/Unix/Command/_cdrdao305
1 files changed, 305 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_cdrdao b/Completion/Unix/Command/_cdrdao
new file mode 100644
index 000000000..7adc54ac1
--- /dev/null
+++ b/Completion/Unix/Command/_cdrdao
@@ -0,0 +1,305 @@
+#compdef cdrdao
+
+# TODO: Options must come before parameters.
+
+# Command completion and main loop {{{1
+
+_cdrdao_commands () {
+  local -a commands
+
+  commands=(
+    'show-toc:print out a summary of a TOC'
+    'read-toc:create a TOC file based on a CD'
+    'read-cd:create a TOC file and image file based on a CD'
+    'read-cddb:add CD-TEXT data from a CDDB server to a TOC'
+    'show-data:print out samples that would be written to CD'
+    'read-test:check if data described in a TOC can be read from a CD'
+    'disk-info:show information about a CD'
+    'msinfo:generate mkisofs command for creating multi-session CD'
+    'unlock:try to unlock a recorder after a failed run'
+    'blank:blank a CD-RW'
+    'simulate:simulate a write'
+    'write:write a CD based on a TOC'
+    'copy:copy a CD'
+  )
+
+  _describe -t commands 'cdrdao command' commands && ret=0
+}
+
+_cdrdao () {
+  local curcontext=$curcontext ret=1
+
+  local context state line
+  typeset -A opt_args
+  _arguments \
+    ':command:->command' \
+    '*::options:->options' && ret=0
+  case $state in
+    (command)
+      _cdrdao_commands
+      ;;
+    (options)
+      curcontext="${curcontext%:*:*}:cdrdao-$words[1]:"
+      _call_function ret _cdrdao-$words[1]
+      ;;
+  esac
+
+}
+
+# Common arguments {{{1
+
+declare -ga tmpfile_args
+tmpfile_args=(
+  '--tmpdir[directory to store temporary data in]:directory:_directories'
+  '--keep[do not remove temporary data when done]')
+
+declare -ga device_args
+device_args=(
+  '--device[set SCSI address of the CD recorder]:device:__cdrdao-device'
+  '--driver[use given driver for the CD recorder]:driver:__cdrdao-driver')
+
+# TODO: Gah!  Fix a cddb server spec matcher
+declare -ga cddb_args
+cddb_args=(
+  '--cddb-servers[specify list of CDDB servers to use]:CDDB servers:'
+  '--cddb-timeout[specify timeout in seconds for connections to CDDB servers]: :_guard "[[\:digit\:]]" timeout'
+  '--cddb-directory[directory where fetched CDDB records will be stored]:directory:_directories')
+
+declare -g paranoiamode_arg=
+paranoiamode_arg='--paranoia-mode[set correction mode for digital audio extraction]:mode:(("0\:no checking" "1\:perform overlapped reading to avoid jitter" "2\:like 1 but with checks of read audio data" "3\:like 2 but with scratch detection/repair (default)"))'
+
+declare -g fasttoc_arg=
+fasttoc_arg='--fast-toc[skip pre-gap-length and index-mark extraction]'
+
+declare -g swap_arg=
+swap_arg='--swap[swap the byte order of samples]'
+
+declare -g reload_arg=
+reload_arg='--reload[reload the disk if necessary]'
+
+declare -g eject_arg=
+eject_arg='--eject[eject CD after completed operation]'
+
+declare -g speed_arg=
+speed_arg='-speed[set writing speed]: :_guard "[[\:digit\:]]##" speed'
+
+declare -ga common_args
+common_args=(
+  '(*)'{-h,--help}'[display command/option summary]'
+  '-v[set verbosity level]: :_guard "[[\:digit\:]]##" verbosity')
+
+declare -ga common_toc_args
+common_toc_args=(
+  $common_args
+  ':TOC file:_files -g "*.toc"')
+
+declare -ga common_device_args
+common_device_args=(
+  $common_args
+  $device_args)
+
+declare -ga common_toc_device_args
+common_toc_device_args=(
+  $common_toc_args
+  $common_device_args
+  $force_arg)
+
+declare -ga common_read_args
+common_read_args=(
+  '--rspeed[set reading speed]: :_guard "[[\:digit\:]]##" speed'
+  '--session[specify what session to process on multi-session CDs]: :_guard "[[\:digit\:]]##" "session number"'
+  '--read-subchan[set sub-channel reading-mode]:mode:(("rw\:de-interleaved and error corrected" "rw_raw\:not de-interleaved, not error-corrected, and L-EC data included"))'
+  '--tao-source[indicate that source CD was written in TAO mode]'
+  '--with-cddb[retrieve CD-TEXT data from a CDDB server]')
+
+# Sub-command completion {{{1
+
+_cdrdao-show-toc () {
+  __cdrdao-show-toc-or-toc-info-or-toc-size
+}
+
+_cdrdao-toc-info () {
+  __cdrdao-show-toc-or-toc-info-or-toc-size
+}
+
+_cdrdao-toc-size () {
+  __cdrdao-show-toc-or-toc-info-or-toc-size
+}
+
+__cdrdao-show-toc-or-toc-info-or-toc-size () {
+  _arguments \
+    $common_toc_args \
+    $tmpfile_args && ret=0
+}
+
+_cdrdao-read-toc () {
+  __cdrdao-read-toc-or-read-cd \
+    $fasttoc_arg
+}
+
+_cdrdao-read-cd () {
+  __cdrdao-read-toc-or-read-cd \
+    $paranoiamode_arg
+}
+
+__cdrdao-read-toc-or-read-cd () {
+  local -a dependent_args
+
+  __cdrdao-read-toc-or-read-cd-or-copy-dependent-args
+
+  _arguments \
+    $common_toc_device_args \
+    $common_read_args \
+    $dependent_args
+    '--datafile[set name of data file placed in TOC file]:file:_files' \
+    '--read-raw[read data in raw format from CD]' \
+    '--no-mode2-mixed[if MODE2_FORM1 or MODE2_FORM2, do not extract as MODE2_FORM_MIX]' \
+    $* && ret=0
+}
+
+_cdrdao-read-cddb () {
+  _arguments \
+    $common_toc_args \
+    $cddb_args && ret=0
+}
+
+_cdrdao-show-data () {
+  _arguments \
+    $common_toc_args \
+    $swap_arg && ret=0
+}
+
+_cdrdao-read-test () {
+  _arguments \
+    $common_toc_args && ret=0
+}
+
+_cdrdao-disk-info () {
+  __cdrdao-disk-info-or-drive-info
+}
+
+__cdrdao-disk-info-or-drive-info () {
+  _arguments \
+    $common_device_args && ret=0
+}
+
+_cdrdao-msinfo () {
+  _arguments \
+    $common_device_args \
+    $reload_arg && ret=0
+}
+
+_cdrdao-drive-info () {
+  __cdrdao-disk-info-or-drive-info
+}
+
+_cdrdao-unlock () {
+  _arguments \
+    $common_device_args \
+    $reload_arg \
+    $eject_arg && ret=0
+}
+
+_cdrdao-blank () {
+  _arguments \
+    $common_device_args \
+    $speed_arg \
+    '--blank-mode[set the blanking mode]:blanking mode:(("full\:completely erase data" "minimal\:only dereference data"))' \
+    $eject_arg && ret=0
+}
+
+_cdrdao-scanbus () {
+  _arguments \
+    $common_args && ret=0
+}
+
+_cdrdao-simulate () {
+  __cdrdao-simulate-or-write
+}
+
+__cdrdao-simulate-or-write () {
+  local capacity_arg=
+  
+  if (( $words[(I)--full-burn] )); then
+    capacity_arg='--capacity[set disk capacity for --full-burn]: :_guard "[[\:digit\:]]" minutes'
+  fi
+
+  _arguments \
+    $common_toc_device_args \
+    $speed_arg \
+    '--multi[do not close the session after successful write]' \
+    '--overburn[allow overburing of medium]' \
+    '--full-burn[force burning to the outer disk edge]' \
+    $capacity_arg \
+    $eject_arg \
+    $swap_arg \
+    '--buffers[set fifo buffer size]: :_guard "[[\:digit\:]]" size' \
+    $reload_arg \
+    $tmpfile_args \
+    '-n[do not pause before writing]' \
+    $* && ret=0
+}
+
+_cdrdao-write () {
+  __cdrdao-simulate-or-write \
+    '--simulate[only perform a write simulation]' \
+    '--buffer-under-run-protection[whether to use buffer under-run protection]:buffer under-run protection setting:(("0\:disable buffer under-run protection" "1\:enable buffer under-run protection"))' \
+    '--write-speed-control[whether to use writing-speed control]:writing-speed control setting:(("0\:disable writing-speed control" "1\:enable writing-speed control"))' \
+    $*
+}
+
+__cdrdao-read-toc-or-read-cd-or-copy-dependent-args () {
+  if (( words[(I)--tao-source] )); then
+    dependent_args+='--tao-source-adjust[specify number of link blocks for tracks written in TAO mode]: :_guard "[[\:digit\:]]##" "link blocks"'
+  fi
+
+  if (( words[(I)--with-cddb] )); then
+    dependent_args+=$cddb_args
+  fi
+}
+
+_cdrdao-copy () {
+  local -ga dependent_args
+
+  __cdrdao-read-toc-or-read-cd-or-copy-dependent-args
+
+  _cdrdao-write \
+    $dependent_args
+    $common_read_args
+    '--source-device[set SCSI address of the CD reader]:device:__cdrdao-device' \
+    '--source-driver[use given driver for the CD reader]:driver:__cdrdao-driver' \
+    '--on-the-fly[perform on-the-fly copy of CD (no image created)]' \
+    $fasttoc_arg \
+    '--keepimage[do not remove generated image when done]' \
+    $paranoiamode_arg && ret=0
+}
+
+# Type completion {{{1
+
+__cdrdao-device () {
+  # Use cdrdao scanbus and also check what OS we’re running under and provide
+  # additional stuff, like devices (/dev/sg0)
+  local -a devices
+
+  devices=(${(f)"$(_call_program devices cdrdao scanbus -v 0 2>/dev/null)"})
+  if (( ${#pipestatus:#0} > 0 )); then
+    return 1
+  fi
+
+  _wanted devices expl 'device' compadd - $devices
+}
+
+__cdrdao-drivers () {
+  local -a drivers
+
+  drivers=(${(f)"$(_call_program drivers cut -d'|' -f4 /usr/share/cdrdao/drivers -s 2>/dev/null | sort -u)"})
+  if (( ${#pipestatus:#0} > 0 )); then
+    return 1
+  fi
+
+  _wanted drivers expl 'driver' compadd -qS: - $drivers
+}
+
+# }}}1
+
+_cdrdao