#compdef coreadm

_coreadm() {
	local -a content option

	content=(
		"anon[Anonymous private mappings]"
		"ctf[CTF type information]"
		"data[Writable private file mappings]"
		"dism[DISM mappings]"
		"heap[Process heap]"
		"ism[ISM mappings]"
		"rodata[Read-only private file mappings]"
		"shanon[Anonymous shared mappings]"
		"shfile[File-backed shared mappings]"
		"shm[System V shared memory]"
		"stack[Process stack]"
		"symtab[Symbol table sections for loaded files]"
		"text[Readable and executable private file mappings]"
	)

	option=(
		"global"\:"Allow global core dumps"
		"global-setid"\:"Allow set-id global core dumps"
		"log"\:"Generate a syslog message on global core dump"
		"process"\:"Allow per-process core dumps"
		"proc-setid"\:"Allow set-id per-process core dumps"
	)

	# _values doesn't quite work for us here -- the separator can be either
	# "+" or "-"
	_arguments -s \
		- set1 \
		'-g[Global core file name pattern]:' \
		'-G[Global core file content]:content:_values -s + "content" $content' \
		'-i[Per-process core file name pattern]:' \
		'-I[Per-process core file content]:content:_values -s + "content" $content' \
		'*-d[Disable core option]:option:(($option))' \
		'*-e[Enable core option]:option:(($option))' \
		- set2 \
		'-p[PID-specific per-process core file name pattern]:' \
		'-P[PID-specific per-process core file content]:content:_values -s + "content" $content' \
		'*:pids:_pids' \
		- set3 \
		'-u[Update options from coreadm.conf]'
}

_coreadm "$@"
