mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 18:10:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			285 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			285 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef cdrdao
 | |
| 
 | |
| # TODO: Options must come before parameters.
 | |
| 
 | |
| # Command completion and main loop {{{1
 | |
| 
 | |
| _cdrdao () {
 | |
|   local ret=1
 | |
|   local -a commands
 | |
|   if (( CURRENT == 2 )); then
 | |
|     commands=( ${${${(M)${(f)"$(_call_program subcommands cdrdao 2>&1)"}:#  *}// #- /:}#??} )
 | |
|     _describe -t subcommands 'cdrdao command' commands && ret=0
 | |
|   else
 | |
|     local cmd="${words[2]}"
 | |
|     local curcontext="${curcontext%:*:*}:cdrdao-$cmd:"
 | |
|     shift words
 | |
|     (( CURRENT-- ))
 | |
|     if ! _call_function ret _cdrdao-$cmd; then
 | |
|       _default && ret=0
 | |
|     fi
 | |
|   fi
 | |
| 
 | |
|   return ret
 | |
| }
 | |
| 
 | |
| # Common arguments {{{1
 | |
| 
 | |
| declare -ga _cdrdao_tmpfile_args
 | |
| _cdrdao_tmpfile_args=(
 | |
|   '--tmpdir[directory to store temporary data in]:directory:_directories'
 | |
|   '--keep[do not remove temporary data when done]'
 | |
| )
 | |
| 
 | |
| # TODO: Gah!  Fix a cddb server spec matcher
 | |
| declare -ga _cdrdao_cddb_args
 | |
| _cdrdao_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 _cdrdao_paranoiamode_arg
 | |
| _cdrdao_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 _cdrdao_fasttoc_arg
 | |
| _cdrdao_fasttoc_arg='--fast-toc[skip pre-gap-length and index-mark extraction]'
 | |
| 
 | |
| declare -g _cdrdao_swap_arg
 | |
| _cdrdao_swap_arg='--swap[swap the byte order of samples]'
 | |
| 
 | |
| declare -g _cdrdao_reload_arg
 | |
| _cdrdao_reload_arg='--reload[reload the disk if necessary]'
 | |
| 
 | |
| declare -g _cdrdao_eject_arg
 | |
| _cdrdao_eject_arg='--eject[eject CD after completed operation]'
 | |
| 
 | |
| declare -g _cdrdao_speed_arg
 | |
| _cdrdao_speed_arg='-speed[set writing speed]: :_guard "[[\:digit\:]]##" speed'
 | |
| 
 | |
| declare -ga _cdrdao_common_args
 | |
| _cdrdao_common_args=(
 | |
|   '(*)'{-h,--help}'[display command/option summary]'
 | |
|   '-v[set verbosity level]: :_guard "[[\:digit\:]]##" verbosity')
 | |
| 
 | |
| declare -ga _cdrdao_common_toc_args
 | |
| _cdrdao_common_toc_args=(
 | |
|   $_cdrdao_common_args
 | |
|   ':TOC file:_files -g "*.toc(-.)"')
 | |
| 
 | |
| declare -ga _cdrdao_common_device_args
 | |
| _cdrdao_common_device_args=(
 | |
|   $_cdrdao_common_args
 | |
|   '--device[set SCSI address of the CD recorder]:device:__cdrdao-device'
 | |
|   '--driver[use given driver for the CD recorder]:driver:__cdrdao-drivers'
 | |
| )
 | |
| 
 | |
| declare -ga _cdrdao_common_toc_device_args
 | |
| _cdrdao_common_toc_device_args=(
 | |
|   $_cdrdao_common_toc_args
 | |
|   $_cdrdao_common_device_args
 | |
|   '--force[force execution of operation]'
 | |
| )
 | |
| 
 | |
| declare -ga _cdrdao_common_read_args
 | |
| _cdrdao_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 \
 | |
|     $_cdrdao_common_toc_args \
 | |
|     $_cdrdao_tmpfile_args
 | |
| }
 | |
| 
 | |
| _cdrdao-read-toc () {
 | |
|   __cdrdao-read-toc-or-read-cd $_cdrdao_cddb_args
 | |
| }
 | |
| 
 | |
| _cdrdao-read-cd () {
 | |
|   __cdrdao-read-toc-or-read-cd \
 | |
|     $_cdrdao_paranoiamode_arg \
 | |
|     $_cdrdao_cddb_args
 | |
| }
 | |
| 
 | |
| __cdrdao-read-toc-or-read-cd () {
 | |
|   local -a dependent_args
 | |
| 
 | |
|   __cdrdao-read-toc-or-read-cd-or-copy-dependent-args
 | |
| 
 | |
|   _arguments \
 | |
|     $_cdrdao_common_toc_device_args \
 | |
|     $_cdrdao_common_read_args \
 | |
|     $dependent_args \
 | |
|     $_cdrdao_fasttoc_arg \
 | |
|     '--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 \
 | |
|     $_cdrdao_common_toc_args \
 | |
|     $_cdrdao_cddb_args
 | |
| }
 | |
| 
 | |
| _cdrdao-show-data () {
 | |
|   _arguments \
 | |
|     $_cdrdao_common_toc_args \
 | |
|     $_cdrdao_swap_arg
 | |
| }
 | |
| 
 | |
| _cdrdao-read-test () {
 | |
|   _arguments \
 | |
|     $_cdrdao_common_toc_args
 | |
| }
 | |
| 
 | |
| _cdrdao-disk-info () {
 | |
|   __cdrdao-disk-info-or-drive-info
 | |
| }
 | |
| 
 | |
| __cdrdao-disk-info-or-drive-info () {
 | |
|   _arguments \
 | |
|     $_cdrdao_common_device_args
 | |
| }
 | |
| 
 | |
| _cdrdao-discid() {
 | |
|   _arguments $_cdrdao_common_device_args $_cdrdao_cddb_args \
 | |
|     '--query-string[print out CDDB query only]'
 | |
| }
 | |
| 
 | |
| _cdrdao-msinfo () {
 | |
|   _arguments \
 | |
|     $_cdrdao_common_device_args \
 | |
|     $_cdrdao_reload_arg
 | |
| }
 | |
| 
 | |
| _cdrdao-drive-info () {
 | |
|   __cdrdao-disk-info-or-drive-info
 | |
| }
 | |
| 
 | |
| _cdrdao-unlock () {
 | |
|   _arguments \
 | |
|     $_cdrdao_common_device_args \
 | |
|     $_cdrdao_reload_arg \
 | |
|     $_cdrdao_eject_arg
 | |
| }
 | |
| 
 | |
| _cdrdao-blank () {
 | |
|   _arguments \
 | |
|     $_cdrdao_common_device_args \
 | |
|     $_cdrdao_speed_arg \
 | |
|     '--blank-mode[set the blanking mode]:blanking mode:(("full\:completely erase data" "minimal\:only dereference data"))' \
 | |
|     $_cdrdao_eject_arg
 | |
| }
 | |
| 
 | |
| _cdrdao-scanbus () {
 | |
|   _arguments \
 | |
|     $_cdrdao_common_args
 | |
| }
 | |
| 
 | |
| _cdrdao-simulate () {
 | |
|   __cdrdao-simulate-or-write
 | |
| }
 | |
| 
 | |
| __cdrdao-simulate-or-write () {
 | |
|   local _cdrdao_capacity_arg=
 | |
| 
 | |
|   if (( $words[(I)--full-burn] )); then
 | |
|     _cdrdao_capacity_arg='--capacity[set disk capacity for --full-burn]: :_guard "[[\:digit\:]]" minutes'
 | |
|   fi
 | |
| 
 | |
|   _arguments \
 | |
|     $_cdrdao_common_toc_device_args \
 | |
|     $_cdrdao_speed_arg \
 | |
|     '--multi[do not close the session after successful write]' \
 | |
|     '--overburn[allow overburning of medium]' \
 | |
|     '--full-burn[force burning to the outer disk edge]' \
 | |
|     $_cdrdao_capacity_arg \
 | |
|     $_cdrdao_eject_arg \
 | |
|     $_cdrdao_swap_arg \
 | |
|     '--buffers[set fifo buffer size]: :_guard "[[\:digit\:]]" size' \
 | |
|     $_cdrdao_reload_arg \
 | |
|     $_cdrdao_tmpfile_args \
 | |
|     '-n[do not pause before writing]' \
 | |
|     $*
 | |
| }
 | |
| 
 | |
| _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+=$_cdrdao_cddb_args
 | |
|   fi
 | |
| }
 | |
| 
 | |
| _cdrdao-copy () {
 | |
|   local -a dependent_args
 | |
| 
 | |
|   __cdrdao-read-toc-or-read-cd-or-copy-dependent-args
 | |
| 
 | |
|   _cdrdao-write \
 | |
|     $dependent_args \
 | |
|     $_cdrdao_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-drivers' \
 | |
|     '--on-the-fly[perform on-the-fly copy of CD (no image created)]' \
 | |
|     $_cdrdao_fasttoc_arg \
 | |
|     '--keepimage[do not remove generated image when done]' \
 | |
|     $_cdrdao_paranoiamode_arg
 | |
| }
 | |
| 
 | |
| # 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 expl devices
 | |
|   devices=(${${(f)"$(_call_program devices cdrdao scanbus -v 0 2>&1)"}%% :*})
 | |
| 
 | |
|   _wanted devices expl 'device' compadd -a devices
 | |
| }
 | |
| 
 | |
| __cdrdao-drivers () {
 | |
|   local expl suf
 | |
|   local -Ua drivers
 | |
|   drivers=(${(f)"$(_call_program drivers cut -d'\|' -f4 /usr/share/cdrdao/drivers -s)"})
 | |
|   if compset -P \*:; then
 | |
|     _message -e options option
 | |
|   else
 | |
|     compset -S :\* || suf=-qS:
 | |
|     _wanted drivers expl 'driver' compadd $suf -a drivers
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # }}}1
 | |
| 
 | |
| _cdrdao
 |