#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 "$@"
