Index: head/usr.sbin/bsdconfig/includes/USAGE =================================================================== --- head/usr.sbin/bsdconfig/includes/USAGE (revision 258405) +++ head/usr.sbin/bsdconfig/includes/USAGE (revision 258406) @@ -1,71 +1,71 @@ # Copyright (c) 2013 Devin Teske # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ Usage: bsdconfig @PROGRAM_NAME@ [OPTIONS] [include ...] OPTIONS: -a Always use color even when output is not to a terminal. - -d Print the description for each function selected. + -d Print description for each function selected. Implies `-f'. -f Show functions for selected includes. -F pattern If `-f', only print functions matching pattern. Without `-f' print only includes containing functions matching pattern. -h Print this usage statement and exit. -n Disable the use of color. EXAMPLES: View a list of available includes: bsdconfig @PROGRAM_NAME@ View functions for all available includes (function names are highlighted): bsdconfig @PROGRAM_NAME@ -f View functions with less(1) (function names are not highlighted): bsdconfig @PROGRAM_NAME@ -f | less View functions with less(1) and color: bsdconfig @PROGRAM_NAME@ -af | less -R View functions from `common.subr': bsdconfig @PROGRAM_NAME@ common.subr NB: The `-f' flag is implied when given an include. Show only functions containing the word `show' in common.subr: bsdconfig @PROGRAM_NAME@ -F show common NB: The `.subr' suffix on the end of the include is optional. Show descriptions of each of the `show' functions: - bsdconfig @PROGRAM_NAME@ -dfF show + bsdconfig @PROGRAM_NAME@ -dF show Index: head/usr.sbin/bsdconfig/includes/includes =================================================================== --- head/usr.sbin/bsdconfig/includes/includes (revision 258405) +++ head/usr.sbin/bsdconfig/includes/includes (revision 258406) @@ -1,176 +1,176 @@ #!/bin/sh #- # Copyright (c) 2013 Devin Teske # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # ############################################################ INCLUDES # Prevent common.subr from auto initializing debugging (this is not an inter- # active utility that requires debugging; also `-d' has been repurposed). # DEBUG_SELF_INITIALIZE=NO BSDCFG_SHARE="/usr/share/bsdconfig" . $BSDCFG_SHARE/common.subr || exit 1 f_dprintf "%s: loading includes..." "$0" BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="includes" f_include_lang $BSDCFG_LIBE/include/messages.subr f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr ipgm=$( f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" ) [ $? -eq $SUCCESS -a "$ipgm" ] && pgm="$ipgm" ############################################################ GLOBALS # # Options # USE_COLOR=1 SHOW_DESC= SHOW_FUNCS= FUNC_PATTERN= ############################################################ FUNCTIONS # show_functions $file # # Show the functions in the given include file. # show_include() { local file="${1#./}" local pattern="${FUNC_PATTERN:-.*}" output=$( awk \ -v use_color=${USE_COLOR:-0} \ -v re="$pattern" \ -v show_desc=${SHOW_DESC:-0} ' /^$/,/^#/ { if ($0 ~ /^# f_/) { if (!match($2, re)) next if (use_color) printf "+%s%s%s\n", substr($0, 2, RSTART), substr($0, 2 + RSTART, RLENGTH), substr($0, 2 + RSTART + RLENGTH) else print substr($0, 2) if (show_desc) print_more = 1 else print_more = substr($0, length($0)) == "\\" } if (show_desc && print_more) { getline while ($0 ~ /^#/) { print substr($0, 2) getline } print_more = 0 } else while (print_more) { getline print substr($0, 2) print_more = substr($0, length($0)) == "\\" } }' "$file" ) if [ "$output" ]; then if [ ! "$SHOW_FUNCS" ]; then echo "$file" return $SUCCESS fi if [ "$FUNC_PATTERN" ]; then printf ">>> $msg_functions_in_matching\n" \ "$file" "$FUNC_PATTERN" else printf ">>> $msg_functions_in\n" "$file" fi echo "$output" echo # blank line to simplify awk(1)-based reparse fi } ############################################################ MAIN # Incorporate rc-file if it exists [ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc" # Are we in a terminal? [ -t 1 ] || USE_COLOR= # # Process command-line arguments # while getopts adfF:hn flag; do case "$flag" in a) USE_COLOR=1 ;; - d) SHOW_DESC=1 ;; + d) SHOW_DESC=1 SHOW_FUNCS=1 ;; f) SHOW_FUNCS=1 ;; F) FUNC_PATTERN="$OPTARG" ;; n) USE_COLOR= ;; h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;; esac done shift $(( $OPTIND - 1 )) # cd(1) to `share' dir so relative paths work for find and positional args cd $BSDCFG_SHARE || f_die 1 "$msg_directory_not_found" "$BSDCFG_SHARE" # # If given an argument, operate on it specifically (implied `-f') and exit # [ $# -gt 0 ] && SHOW_FUNCS=1 for include in "$@"; do # See if they've just omitted the `*.subr' suffix [ -f "$include.subr" -a ! -f "$include" ] && include="$include.subr" if [ ! -f "$include" ]; then f_die 1 "$msg_no_such_file_or_directory" "$0" "$include" elif [ ! -r "$include" ]; then f_die 1 "$msg_permission_denied" "$0" "$include" fi show_include "$include" || f_die done # Exit if we processed some include arguments [ $# -gt 0 ] && exit $SUCCESS # # Operate an all known include files # NB: If we get this far, we had no include arguments # find -s . -type f -and -iname '*.subr' | while read file; do if [ "$SHOW_FUNCS" -o "$FUNC_PATTERN" ]; then show_include "$file" else echo "${file#./}" fi done exit $SUCCESS ################################################################################ # END ################################################################################