xref: /titanic_51/usr/src/lib/libshell/common/scripts/shman.sh (revision 3e14f97f673e8a630f076077de35afdd43dc1587)
17c2fbfb3SApril Chin#!/usr/bin/ksh93
27c2fbfb3SApril Chin
37c2fbfb3SApril Chin#
47c2fbfb3SApril Chin# CDDL HEADER START
57c2fbfb3SApril Chin#
67c2fbfb3SApril Chin# The contents of this file are subject to the terms of the
77c2fbfb3SApril Chin# Common Development and Distribution License (the "License").
87c2fbfb3SApril Chin# You may not use this file except in compliance with the License.
97c2fbfb3SApril Chin#
107c2fbfb3SApril Chin# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
117c2fbfb3SApril Chin# or http://www.opensolaris.org/os/licensing.
127c2fbfb3SApril Chin# See the License for the specific language governing permissions
137c2fbfb3SApril Chin# and limitations under the License.
147c2fbfb3SApril Chin#
157c2fbfb3SApril Chin# When distributing Covered Code, include this CDDL HEADER in each
167c2fbfb3SApril Chin# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
177c2fbfb3SApril Chin# If applicable, add the following below this CDDL HEADER, with the
187c2fbfb3SApril Chin# fields enclosed by brackets "[]" replaced with your own identifying
197c2fbfb3SApril Chin# information: Portions Copyright [yyyy] [name of copyright owner]
207c2fbfb3SApril Chin#
217c2fbfb3SApril Chin# CDDL HEADER END
227c2fbfb3SApril Chin#
237c2fbfb3SApril Chin
247c2fbfb3SApril Chin#
25*3e14f97fSRoger A. Faulkner# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
267c2fbfb3SApril Chin#
277c2fbfb3SApril Chin
287c2fbfb3SApril Chin# Solaris needs /usr/xpg6/bin:/usr/xpg4/bin because the tools in /usr/bin are not POSIX-conformant
297c2fbfb3SApril Chinexport PATH=/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin
307c2fbfb3SApril Chin
317c2fbfb3SApril Chin# Make sure all math stuff runs in the "C" locale to avoid problems
327c2fbfb3SApril Chin# with alternative # radix point representations (e.g. ',' instead of
337c2fbfb3SApril Chin# '.' in de_DE.*-locales). This needs to be set _before_ any
347c2fbfb3SApril Chin# floating-point constants are defined in this script).
357c2fbfb3SApril Chinif [[ "${LC_ALL}" != "" ]] ; then
367c2fbfb3SApril Chin    export \
377c2fbfb3SApril Chin        LC_MONETARY="${LC_ALL}" \
387c2fbfb3SApril Chin        LC_MESSAGES="${LC_ALL}" \
397c2fbfb3SApril Chin        LC_COLLATE="${LC_ALL}" \
407c2fbfb3SApril Chin        LC_CTYPE="${LC_ALL}"
417c2fbfb3SApril Chin        unset LC_ALL
427c2fbfb3SApril Chinfi
437c2fbfb3SApril Chinexport LC_NUMERIC=C
447c2fbfb3SApril Chin
457c2fbfb3SApril Chinfunction fatal_error
467c2fbfb3SApril Chin{
477c2fbfb3SApril Chin	print -u2 "${progname}: $*"
487c2fbfb3SApril Chin	exit 1
497c2fbfb3SApril Chin}
507c2fbfb3SApril Chin
517c2fbfb3SApril Chinfunction debug_print
527c2fbfb3SApril Chin{
537c2fbfb3SApril Chin	# don't use "--" here to allow "-f" for formatting
547c2fbfb3SApril Chin#	print -u2 "$@"
557c2fbfb3SApril Chin	return 0
567c2fbfb3SApril Chin}
577c2fbfb3SApril Chin
587c2fbfb3SApril Chin# Build a list of compound variables calculated from MANPATH and
597c2fbfb3SApril Chin# locale which contain...
607c2fbfb3SApril Chin# "manpath_element" - the MANPATH element this entry belongs to
617c2fbfb3SApril Chin# "dir"             - physical directory of "manpath_element"
627c2fbfb3SApril Chin# "sect"            - section (if "manpath_element" is something like /usr/share/man,1b)
637c2fbfb3SApril Chin# ... and put the result in the array named by argv[1]
647c2fbfb3SApril Chinfunction enumerate_mandirs
657c2fbfb3SApril Chin{
667c2fbfb3SApril Chin	nameref md=$1
677c2fbfb3SApril Chin	typeset manpath_element dir sect manlang
687c2fbfb3SApril Chin	integer i=0
697c2fbfb3SApril Chin
707c2fbfb3SApril Chin	if [[ "${LC_MESSAGES}" != "" ]] ; then
717c2fbfb3SApril Chin		manlang="${LC_MESSAGES}"
727c2fbfb3SApril Chin	else
737c2fbfb3SApril Chin		manlang="${LANG}"
747c2fbfb3SApril Chin	fi
757c2fbfb3SApril Chin
767c2fbfb3SApril Chin	print -r -- "${MANPATH//:/$'\n'}" | while read manpath_element ; do
777c2fbfb3SApril Chin		# strip section from manpath elements like "/usr/share/man,1b"
787c2fbfb3SApril Chin		dir="${manpath_element/~(E)(.*),(.*)/\1}"
797c2fbfb3SApril Chin		sect="${manpath_element/~(E)(.*),(.*)/\2}"
807c2fbfb3SApril Chin		[[ "${sect}" == "${dir}" ]] && sect=""
817c2fbfb3SApril Chin
827c2fbfb3SApril Chin		if [[ "${manlang}" != "" && -d "${dir}/${manlang}" ]] ; then
837c2fbfb3SApril Chin			md+=(
847c2fbfb3SApril Chin				manpath_element="${manpath_element}"
857c2fbfb3SApril Chin				dir="${dir}/${manlang}"
867c2fbfb3SApril Chin				sect="${sect}"
877c2fbfb3SApril Chin			)
887c2fbfb3SApril Chin		fi
897c2fbfb3SApril Chin		if [[ -d "${dir}" ]] ; then
907c2fbfb3SApril Chin			md+=(
917c2fbfb3SApril Chin				manpath_element="${manpath_element}"
927c2fbfb3SApril Chin				dir="${dir}"
937c2fbfb3SApril Chin				sect="${sect}"
947c2fbfb3SApril Chin			)
957c2fbfb3SApril Chin		fi
967c2fbfb3SApril Chin	done
977c2fbfb3SApril Chin
987c2fbfb3SApril Chin	return 0
997c2fbfb3SApril Chin}
1007c2fbfb3SApril Chin
1017c2fbfb3SApril Chinfunction enumerate_mansects
1027c2fbfb3SApril Chin{
1037c2fbfb3SApril Chin	nameref ms=$1
1047c2fbfb3SApril Chin	nameref mandir_node=$2
1057c2fbfb3SApril Chin	typeset mancf="${mandir_node.dir}/man.cf"
1067c2fbfb3SApril Chin	typeset x s l
1077c2fbfb3SApril Chin
1087c2fbfb3SApril Chin	if [[ "${mandir_node.sect}" != "" ]] ; then
1097c2fbfb3SApril Chin		x="${mandir_node.sect}"
1107c2fbfb3SApril Chin	elif [[ "${MANSECTS}" != "" ]] ; then
1117c2fbfb3SApril Chin		x="${MANSECTS//,/$'\n'}"
1127c2fbfb3SApril Chin	elif [[ -f "${mancf}" && -r "${mancf}" ]] ; then
1137c2fbfb3SApril Chin		x="$(egrep -v '^#|^[[:space:]]*$' <"${mancf}" | egrep '^MANSECTS=')"
1147c2fbfb3SApril Chin		x="${x/MANSECTS=}/"
1157c2fbfb3SApril Chin		x="${x//,/$'\n'}"
1167c2fbfb3SApril Chin	else
1177c2fbfb3SApril Chin		x="$(cd "${mandir_node.dir}" ; \
1187c2fbfb3SApril Chin			ls -1d ~(El)(sman|man).*/ | \
1197c2fbfb3SApril Chin			while read s ; do \
1207c2fbfb3SApril Chin				s="${s/~(El)(sman|man)/}" ; \
1217c2fbfb3SApril Chin				s="${s/~(Er)\//}" ; \
1227c2fbfb3SApril Chin				print -r -- "$s" ; \
1237c2fbfb3SApril Chin			done)"
1247c2fbfb3SApril Chin	fi
1257c2fbfb3SApril Chin
1267c2fbfb3SApril Chin	while read l ; do
1277c2fbfb3SApril Chin		[[ "${l}" != ~(Elr)[[:blank:]]* ]] && ms+=( "${l}" )
1287c2fbfb3SApril Chin#		print -- "sect=$l"
1297c2fbfb3SApril Chin	done <<<"${x}"
1307c2fbfb3SApril Chin
1317c2fbfb3SApril Chin#	printf "enumerate_mansects: found %d entries.\n" ${#ms[@]}
1327c2fbfb3SApril Chin
1337c2fbfb3SApril Chin	return 0
1347c2fbfb3SApril Chin}
1357c2fbfb3SApril Chin
1367c2fbfb3SApril Chin# wrapper around more/less
1377c2fbfb3SApril Chinfunction browse_manpage
1387c2fbfb3SApril Chin{
1397c2fbfb3SApril Chin	typeset tmpdirname
1407c2fbfb3SApril Chin	typeset doc_filename="$1"
1417c2fbfb3SApril Chin	typeset doc_title="$2"
1427c2fbfb3SApril Chin
1437c2fbfb3SApril Chin	# squish characters in filename which are not allowed in a filesystem
1447c2fbfb3SApril Chin	# (currently '/')
1457c2fbfb3SApril Chin	doc_title="${doc_title//\//}"
1467c2fbfb3SApril Chin
1477c2fbfb3SApril Chin	# check if we have "less" installed, if not fall back to /usr/xpg4/bin/more
1487c2fbfb3SApril Chin	if which less >/dev/null 2>&1 ; then
1497c2fbfb3SApril Chin		# use "cat" here to avoid that "less" may try funny things
1507c2fbfb3SApril Chin		cat <"${doc_filename}" | less -I -M $"--prompt=MManual\ page\ ${doc_title}\ ?ltline\ %lt?L/%L.:"
1517c2fbfb3SApril Chin	else
152*3e14f97fSRoger A. Faulkner		tmpdirname="$(mktemp -t -d "shman_${PPID}_$$_XXXXXX")"
1537c2fbfb3SApril Chin
1547c2fbfb3SApril Chin		mkdir -p "${tmpdirname}" || { print -u2 -f $"Couldn't create tmp. dir %s\n" "${tmpdirname}" ; return 1 ; }
1557c2fbfb3SApril Chin
1567c2fbfb3SApril Chin		(
1577c2fbfb3SApril Chin			cd "${tmpdirname}"
1587c2fbfb3SApril Chin
1597c2fbfb3SApril Chin			# note: we need to support /dev/stdin
1607c2fbfb3SApril Chin			cat <"${doc_filename}" >"./${doc_title}"
1617c2fbfb3SApril Chin
1627c2fbfb3SApril Chin			/usr/xpg4/bin/more "${doc_title}"
1637c2fbfb3SApril Chin
1647c2fbfb3SApril Chin			rm -f "${doc_title}"
1657c2fbfb3SApril Chin		)
1667c2fbfb3SApril Chin
1677c2fbfb3SApril Chin		rmdir "${tmpdirname}"
1687c2fbfb3SApril Chin	fi
1697c2fbfb3SApril Chin
1707c2fbfb3SApril Chin	return 0
1717c2fbfb3SApril Chin}
1727c2fbfb3SApril Chin
1737c2fbfb3SApril Chin# /usr/bin/man <keyword>
1747c2fbfb3SApril Chinfunction show_manpage
1757c2fbfb3SApril Chin{
17634f9b3eeSRoland Mainz	compound -a mandirs
1777c2fbfb3SApril Chin	integer i
1787c2fbfb3SApril Chin	integer j
1797c2fbfb3SApril Chin
1807c2fbfb3SApril Chin	enumerate_mandirs mandirs
1817c2fbfb3SApril Chin#	debug_print -- "${mandirs[@]}"
1827c2fbfb3SApril Chin
1837c2fbfb3SApril Chin	integer num_mandirs=${#mandirs[@]}
1847c2fbfb3SApril Chin
1857c2fbfb3SApril Chin	for ((i=0 ; i < num_mandirs ; i++ )) ; do
1867c2fbfb3SApril Chin		typeset mandir="${mandirs[i].dir}"
1877c2fbfb3SApril Chin
1887c2fbfb3SApril Chin		typeset -a mansects
1897c2fbfb3SApril Chin		enumerate_mansects mansects "mandirs[$i]"
1907c2fbfb3SApril Chin
1917c2fbfb3SApril Chin		integer num_mansects="${#mansects[@]}"
1927c2fbfb3SApril Chin#		debug_print -- "mansects=${mansects[@]}"
1937c2fbfb3SApril Chin
1947c2fbfb3SApril Chin		for ((j=0 ; j < num_mansects ; j++ )) ; do
1957c2fbfb3SApril Chin			typeset mansect="${mansects[j]}"
1967c2fbfb3SApril Chin
1977c2fbfb3SApril Chin			# try 1: SGML manpage
1987c2fbfb3SApril Chin			typeset match="${mandir}/sman${mansect}/${manname}.${mansect}"
1997c2fbfb3SApril Chin			if [[ -r "${match}" ]] ; then
2007c2fbfb3SApril Chin				typeset note nlink
2017c2fbfb3SApril Chin
2027c2fbfb3SApril Chin				# follow SGML links if needed (needs rework, including protection against link loops)
2037c2fbfb3SApril Chin				while true ; do
2047c2fbfb3SApril Chin					debug_print -f "match: %s\n" "${match}"
2057c2fbfb3SApril Chin
2067c2fbfb3SApril Chin					tmp="$(cd "${mandir}" ; LC_MESSAGES=C /usr/lib/sgml/sgml2roff "${match}")"
2077c2fbfb3SApril Chin					read note nlink <<<"${tmp}"
2087c2fbfb3SApril Chin
2097c2fbfb3SApril Chin					if [[ "${note}" == ".so" ]] ; then
2107c2fbfb3SApril Chin						match="${nlink}"
2117c2fbfb3SApril Chin					else
2127c2fbfb3SApril Chin						break
2137c2fbfb3SApril Chin					fi
2147c2fbfb3SApril Chin				done
2157c2fbfb3SApril Chin
2167c2fbfb3SApril Chin				tbl <<<"${tmp}" | eqn | nroff -u0 -Tlp -man - | col -x | browse_manpage /dev/stdin "${manname}(${mansect})"
2177c2fbfb3SApril Chin				return 0
2187c2fbfb3SApril Chin			fi
2197c2fbfb3SApril Chin
2207c2fbfb3SApril Chin			# try 2: troff manpage
2217c2fbfb3SApril Chin			match="${mandir}/man${mansect}/${manname}.${mansect}"
2227c2fbfb3SApril Chin			if [[ -r "${match}" ]] ; then
2237c2fbfb3SApril Chin				debug_print -f "match: %s\n" "${match}"
2247c2fbfb3SApril Chin				tbl <"${match}" | eqn | nroff -u0 -Tlp -man - | col -x | browse_manpage /dev/stdin "${manname}(${mansect})"
2257c2fbfb3SApril Chin				return 0
2267c2fbfb3SApril Chin			fi
2277c2fbfb3SApril Chin		done
2287c2fbfb3SApril Chin		unset mansects num_mansects
2297c2fbfb3SApril Chin	done
2307c2fbfb3SApril Chin
2317c2fbfb3SApril Chin	printf $"No manual entry for %s.\n" "${manname}"
2327c2fbfb3SApril Chin	return 0
2337c2fbfb3SApril Chin}
2347c2fbfb3SApril Chin
2357c2fbfb3SApril Chin# /usr/bin/man -l <keyword>
2367c2fbfb3SApril Chinfunction list_manpages
2377c2fbfb3SApril Chin{
23834f9b3eeSRoland Mainz	compound -a mandirs
2397c2fbfb3SApril Chin
2407c2fbfb3SApril Chin	enumerate_mandirs mandirs
2417c2fbfb3SApril Chin	#debug_print -- "${mandirs[@]}"
2427c2fbfb3SApril Chin
2437c2fbfb3SApril Chin	integer num_mandirs=${#mandirs[@]}
2447c2fbfb3SApril Chin
2457c2fbfb3SApril Chin	for ((i=0 ; i < num_mandirs ; i++ )) ; do
2467c2fbfb3SApril Chin		typeset mandir="${mandirs[i].dir}"
2477c2fbfb3SApril Chin
2487c2fbfb3SApril Chin		typeset -a mansects
2497c2fbfb3SApril Chin		enumerate_mansects mansects "mandirs[$i]"
2507c2fbfb3SApril Chin
2517c2fbfb3SApril Chin		integer num_mansects="${#mansects[@]}"
2527c2fbfb3SApril Chin#		debug_print -- "mansects=${mansects[@]}"
2537c2fbfb3SApril Chin
2547c2fbfb3SApril Chin		for ((j=0 ; j < num_mansects ; j++ )) ; do
2557c2fbfb3SApril Chin			mansect="${mansects[j]}"
2567c2fbfb3SApril Chin
2577c2fbfb3SApril Chin			# try 1: SGML manpage
2587c2fbfb3SApril Chin			match="${mandir}/sman${mansect}/${manname}.${mansect}"
2597c2fbfb3SApril Chin			if [[ -r "${match}" ]] ; then
2607c2fbfb3SApril Chin				printf "%s (%s)\t-M %s\n" "${manname}" "${mansect}" "${mandir}"
2617c2fbfb3SApril Chin				continue
2627c2fbfb3SApril Chin			fi
2637c2fbfb3SApril Chin
2647c2fbfb3SApril Chin			# try 2: troff manpage
2657c2fbfb3SApril Chin			match="${mandir}/man${mansect}/${manname}.${mansect}"
2667c2fbfb3SApril Chin			if [[ -r "${match}" ]] ; then
2677c2fbfb3SApril Chin				printf "%s (%s)\t-M %s\n" "${manname}" "${mansect}" "${mandir}"
2687c2fbfb3SApril Chin				continue
2697c2fbfb3SApril Chin			fi
2707c2fbfb3SApril Chin		done
2717c2fbfb3SApril Chin		unset mansects num_mansects
2727c2fbfb3SApril Chin	done
2737c2fbfb3SApril Chin
2747c2fbfb3SApril Chin	return 0
2757c2fbfb3SApril Chin}
2767c2fbfb3SApril Chin
2777c2fbfb3SApril Chin# /usr/bin/appropos
2787c2fbfb3SApril Chinfunction list_keywords
2797c2fbfb3SApril Chin{
2807c2fbfb3SApril Chin	typeset -a mandirs
2817c2fbfb3SApril Chin	typeset name namesec title
2827c2fbfb3SApril Chin
2837c2fbfb3SApril Chin	enumerate_mandirs mandirs
2847c2fbfb3SApril Chin	#debug_print -- "${mandirs[@]}"
2857c2fbfb3SApril Chin
2867c2fbfb3SApril Chin	integer num_mandirs=${#mandirs[@]}
2877c2fbfb3SApril Chin
2887c2fbfb3SApril Chin	for ((i=0 ; i < num_mandirs ; i++ )) ; do
2897c2fbfb3SApril Chin		typeset mandir="${mandirs[i].dir}"
2907c2fbfb3SApril Chin		typeset windexfile="${mandir}/windex"
2917c2fbfb3SApril Chin
2927c2fbfb3SApril Chin		if [[ ! -r "${windexfile}" ]] ; then
2937c2fbfb3SApril Chin			print -u2 -f $"%s: Can't open %s.\n" "${progname}" "${windexfile}"
2947c2fbfb3SApril Chin			continue
2957c2fbfb3SApril Chin		fi
2967c2fbfb3SApril Chin
2977c2fbfb3SApril Chin		while IFS=$'\t' read name namesec title ; do
2987c2fbfb3SApril Chin			if [[ "${name}${namesec}${title}" == ~(Fi)${manname} ]] ; then
2997c2fbfb3SApril Chin				printf "%s\t%s\t%s\n" "${name}" "${namesec}" "${title}"
3007c2fbfb3SApril Chin			fi
3017c2fbfb3SApril Chin		done <"${windexfile}"
3027c2fbfb3SApril Chin	done
3037c2fbfb3SApril Chin
3047c2fbfb3SApril Chin	return 0
3057c2fbfb3SApril Chin}
3067c2fbfb3SApril Chin
3077c2fbfb3SApril Chinfunction usage
3087c2fbfb3SApril Chin{
3097c2fbfb3SApril Chin	OPTIND=0
3107c2fbfb3SApril Chin	getopts -a "${progname}" "${man_usage}" OPT '-?'
3117c2fbfb3SApril Chin	exit 2
3127c2fbfb3SApril Chin}
3137c2fbfb3SApril Chin
3147c2fbfb3SApril Chin# program start
3157c2fbfb3SApril Chinbuiltin basename
3167c2fbfb3SApril Chinbuiltin cat
3177c2fbfb3SApril Chinbuiltin date
3187c2fbfb3SApril Chin
3197c2fbfb3SApril Chintypeset progname="$(basename "${0}")"
3207c2fbfb3SApril Chin
3217c2fbfb3SApril Chintypeset -r man_usage=$'+
322*3e14f97fSRoger A. Faulkner[-?\n@(#)\$Id: shman (Roland Mainz) 2009-12-02 \$\n]
3237c2fbfb3SApril Chin[-author?Roland Mainz <roland.mainz@nrubsig.org>]
3247c2fbfb3SApril Chin[-author?Roland Mainz <roland.mainz@sun.com>]
3257c2fbfb3SApril Chin[+NAME?man - find and display reference manual pages]
3267c2fbfb3SApril Chin[+DESCRIPTION?The man command displays information from the reference
3277c2fbfb3SApril Chin	manuals. It displays complete manual pages that you select
3287c2fbfb3SApril Chin	by name, or one-line summaries selected  either  by  keyword
3297c2fbfb3SApril Chin	(-k), or by the name of an associated file (-f). If no
3307c2fbfb3SApril Chin	manual page is located, man prints an error message.]
3317c2fbfb3SApril Chin[+?write me.]
3327c2fbfb3SApril Chin[k:keyword?Prints out one-line summaries from the windex database (table of contents) that
3337c2fbfb3SApril Chin	contain any of the given  keywords. The windex database is created using
3347c2fbfb3SApril Chin	catman(1M).]
3357c2fbfb3SApril Chin[l:list?Lists all manual  pages  found  matching name within the search path.]
3367c2fbfb3SApril Chin[M:mpath?Specifies an alternate search  path  for manual  pages. path is a colon-separated
3377c2fbfb3SApril Chin	list of directories that contain  manual page directory subtrees. For example, if
3387c2fbfb3SApril Chin	path  is  /usr/share/man:/usr/local/man, man  searches  for  name in the standard
3397c2fbfb3SApril Chin	location, and then /usr/local/man.  When used  with  the -k or -f options, the -M
3407c2fbfb3SApril Chin	option must appear first. Each directory in  the  path is assumed to contain subdirectories of the form man* or sman*  ,
3417c2fbfb3SApril Chin	one  for each section. This option overrides the MANPATH environment variable.]:[path]
3427c2fbfb3SApril Chin[s:section?Specifies sections of the manual for man to search. The directories searched for
3437c2fbfb3SApril Chin	name are limited to those specified by section. section can be a numerical
3447c2fbfb3SApril Chin	digit, perhaps followed by one or more letters to match the desired section of
3457c2fbfb3SApril Chin	the manual, for example,  "3libucb". Also, section can be a word, for example,
3467c2fbfb3SApril Chin	local, new, old, public. section can also be a letter.
3477c2fbfb3SApril Chin	To specify multiple sections, separate each section with
3487c2fbfb3SApril Chin	a comma. This option overrides the MANPATH environment variable and the man.cf
3497c2fbfb3SApril Chin	file.
3507c2fbfb3SApril Chin	See Search Path below for an explanation of how man conducts its search.]:[section]
3517c2fbfb3SApril Chin
3527c2fbfb3SApril Chinname
3537c2fbfb3SApril Chin
3547c2fbfb3SApril Chin[+SEE ALSO?\bksh93\b(1), \bman\b(1)]
3557c2fbfb3SApril Chin'
3567c2fbfb3SApril Chin
3577c2fbfb3SApril Chintypeset do_list=false
3587c2fbfb3SApril Chintypeset do_keyword=false
3597c2fbfb3SApril Chin
3607c2fbfb3SApril Chinwhile getopts -a "${progname}" "${man_usage}" OPT ; do
3617c2fbfb3SApril Chin#    printmsg "## OPT=|${OPT}|, OPTARG=|${OPTARG}|"
3627c2fbfb3SApril Chin	case ${OPT} in
3637c2fbfb3SApril Chin		M)	MANPATH="${OPTARG}"	;;
3647c2fbfb3SApril Chin		l)	do_list=true		;;
3657c2fbfb3SApril Chin		k)	do_keyword=true		;;
3667c2fbfb3SApril Chin		s)	MANSECTS="${OPTARG}" 	;;
3677c2fbfb3SApril Chin		*)	usage			;;
3687c2fbfb3SApril Chin	esac
3697c2fbfb3SApril Chindone
3707c2fbfb3SApril Chinshift $((OPTIND-1))
3717c2fbfb3SApril Chin
3727c2fbfb3SApril Chin# cd /usr/man; LC_MESSAGES=C /usr/lib/sgml/sgml2roff /usr/man/sman1as/asadmin-list-timers.1as  | tbl | eqn | nroff -u0 -Tlp -man -  | col -x > /tmp/mpLQaqac
3737c2fbfb3SApril Chin
37434f9b3eeSRoland Mainz# prechecks
37534f9b3eeSRoland Mainz(( $# > 0 )) || usage
37634f9b3eeSRoland Mainz
37734f9b3eeSRoland Mainz# process arguments
37834f9b3eeSRoland Mainzwhile (( $# > 0 )) ; do
3797c2fbfb3SApril Chin	typeset manname="$1"
38034f9b3eeSRoland Mainz	shift
38134f9b3eeSRoland Mainz
3827c2fbfb3SApril Chin	debug_print -f "# searching for %s ...\n" "${manname}"
3837c2fbfb3SApril Chin
3847c2fbfb3SApril Chin	if ${do_keyword} ; then
3857c2fbfb3SApril Chin		list_keywords
3867c2fbfb3SApril Chin	elif ${do_list} ; then
3877c2fbfb3SApril Chin		list_manpages
3887c2fbfb3SApril Chin	else
3897c2fbfb3SApril Chin		show_manpage
3907c2fbfb3SApril Chin	fi
39134f9b3eeSRoland Mainzdone
3927c2fbfb3SApril Chin
3937c2fbfb3SApril Chin# todo: better exit codes
3947c2fbfb3SApril Chinexit 0
3957c2fbfb3SApril Chin# EOF.
396