rcvar revision 238438
1249259Sdim#!/bin/sh 2249259Sdim#- 3249259Sdim# Copyright (c) 2012 Devin Teske 4249259Sdim# All Rights Reserved. 5249259Sdim# 6249259Sdim# Redistribution and use in source and binary forms, with or without 7249259Sdim# modification, are permitted provided that the following conditions 8249259Sdim# are met: 9249259Sdim# 1. Redistributions of source code must retain the above copyright 10249259Sdim# notice, this list of conditions and the following disclaimer. 11249259Sdim# 2. Redistributions in binary form must reproduce the above copyright 12249259Sdim# notice, this list of conditions and the following disclaimer in the 13249259Sdim# documentation and/or other materials provided with the distribution. 14249259Sdim# 15249259Sdim# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16249259Sdim# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, THE 17249259Sdim# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18249259Sdim# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19249259Sdim# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20249259Sdim# DAMAGES (INLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21249259Sdim# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22249259Sdim# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23249259Sdim# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24249259Sdim# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25266759Sdim# SUCH DAMAGE. 26266759Sdim# 27263509Sdim# $FreeBSD: head/usr.sbin/bsdconfig/startup/rcvar 238438 2012-07-14 03:16:57Z dteske $ 28263509Sdim# 29249259Sdim############################################################ INCLUDES 30263509Sdim 31263509SdimBSDCFG_LIBE="/usr/libexec/bsdconfig" 32249259Sdim. $BSDCFG_LIBE/include/common.subr || exit 1 33249259Sdimf_include $BSDCFG_LIBE/include/dialog.subr 34249259Sdimf_include $BSDCFG_LIBE/include/mustberoot.subr 35249259Sdimf_include $BSDCFG_LIBE/include/sysrc.subr 36249259Sdim 37249259SdimAPP_DIR="140.startup" 38249259Sdimf_include $BSDCFG_LIBE/$APP_DIR/include/rcvar.subr 39249259Sdimf_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr 40249259Sdim 41249259Sdimipgm=$( f_index_menu_selection $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" ) 42249259Sdim[ $? -eq $SUCCESS -a "$ipgm" ] && pgm="$ipgm" 43249259Sdim 44249259Sdim############################################################ GLOBALS 45249259Sdim 46249259Sdim# 47249259Sdim# Global map/menu-list for the main menu 48249259Sdim# 49249259SdimRCVAR_MAP= 50249259Sdim_RCVAR_MAP= 51249259SdimRCVAR_MENU_LIST= 52249259Sdim 53249259Sdim# 54249259Sdim# Options 55249259Sdim# 56249259Sdim# Inherit SHOW_DESC value if set, otherwise default to 1 57249259Sdim( ${SHOW_DESC?} ) > /dev/null 2>&1 || SHOW_DESC=1 58249259Sdim 59249259Sdim############################################################ FUNCTIONS 60249259Sdim 61249259Sdim# dialog_menu_main 62249259Sdim# 63249259Sdim# Display the dialog(1)-based application main menu. 64249259Sdim# 65249259Sdimdialog_menu_main() 66249259Sdim{ 67249259Sdim local size 68249259Sdim local hline="$hline_arrows_tab_enter" 69249259Sdim local prompt="" 70249259Sdim 71249259Sdim RCVAR_MENU_LIST=" 72249259Sdim 'X $msg_exit' '$msg_exit_this_menu' 73249259Sdim ${SHOW_DESC:+'$msg_exit_this_menu'} 74249259Sdim " # END-QUOTE 75249259Sdim 76249259Sdim if [ ! "$_RCVAR_MAP" ]; then 77249259Sdim # Genreate RCVAR_MAP of `rcvar dflt script desc ...' per-line 78249259Sdim f_dialog_info "$msg_creating_rcvar_map" 79249259Sdim RCVAR_MAP=$( f_startup_rcvar_map ) 80249259Sdim export RCVAR_MAP 81249259Sdim export _RCVAR_MAP=1 82249259Sdim fi 83249259Sdim 84249259Sdim RCVAR_MENU_LIST="$RCVAR_MENU_LIST $( 85249259Sdim . "$RC_DEFAULTS" > /dev/null 86249259Sdim source_rc_confs > /dev/null 87249259Sdim for rcvar in $( echo "$RCVAR_MAP" | awk '{print $1}' ); do 88249259Sdim eval export $rcvar 89249259Sdim done 90249259Sdim export SHOW_DESC msg_default_value 91249259Sdim echo "$RCVAR_MAP" | awk ' 92249259Sdim BEGIN { 93249259Sdim prefix = "" 94249259Sdim rword = "^[[:space:]]*[^[:space:]]*[[:space:]]*" 95249259Sdim } 96249259Sdim { 97249259Sdim cur_prefix = tolower(substr($1, 1, 1)) 98249259Sdim printf "'\''" 99249259Sdim if ( prefix != cur_prefix ) 100249259Sdim prefix = cur_prefix 101249259Sdim else 102249259Sdim printf " " 103249259Sdim rcvar = $1 104249259Sdim default = $2 105249259Sdim script = $3 106249259Sdim printf "%s'\'' '\''", rcvar 107249259Sdim if ( ENVIRON[rcvar] ~ /[Yy][Ee][Ss]/ ) 108249259Sdim printf "[X] " 109249259Sdim else 110249259Sdim printf "[ ] " 111249259Sdim printf "%s; " ENVIRON["msg_default_value"], 112249259Sdim script, default 113249259Sdim printf "'\''" 114249259Sdim if ( ENVIRON["SHOW_DESC"] ) { 115252723Sdim desc = $0 116249259Sdim sub(rword, "", desc) 117249259Sdim sub(rword, "", desc) 118249259Sdim sub(rword, "", desc) 119249259Sdim gsub(/'\''/, "'\''\\'\'\''", desc) 120249259Sdim printf " '\''%s'\''", desc 121249259Sdim } 122249259Sdim printf "\n" 123249259Sdim }' 124249259Sdim )" 125249259Sdim 126249259Sdim set -f # noglob 127249259Sdim 128249259Sdim size=$( eval f_dialog_menu_${SHOW_DESC:+with_help_}size \ 129249259Sdim \"\$DIALOG_TITLE\" \ 130249259Sdim \"\$DIALOG_BACKTITLE\" \ 131249259Sdim \"\$prompt\" \ 132249259Sdim \"\$hline\" \ 133263509Sdim $RCVAR_MENU_LIST ) 134263509Sdim 135263509Sdim eval $DIALOG \ 136263509Sdim --clear --title \"\$DIALOG_TITLE\" \ 137263509Sdim --backtitle \"\$DIALOG_BACKTITLE\" \ 138249259Sdim --hline \"\$hline\" \ 139249259Sdim --ok-label \"\$msg_ok\" \ 140249259Sdim --cancel-label \"\$msg_cancel\" \ 141249259Sdim ${SHOW_DESC:+--item-help} \ 142249259Sdim --menu \"\$prompt\" $size \ 143249259Sdim $RCVAR_MENU_LIST \ 144249259Sdim 2> "$DIALOG_TMPDIR/dialog.menu.$$" 145249259Sdim} 146249259Sdim 147249259Sdim############################################################ MAIN 148263509Sdim 149263509Sdim# Incorporate rc-file if it exists 150263509Sdim[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc" 151263509Sdim 152263509Sdim# 153263509Sdim# Process command-line arguments 154263509Sdim# 155263509Sdimwhile getopts hSX flag; do 156249259Sdim case "$flag" in 157249259Sdim h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm";; 158249259Sdim esac 159249259Sdimdone 160263509Sdimshift $(( $OPTIND - 1 )) 161249259Sdim 162249259Sdim# 163249259Sdim# Initialize 164249259Sdim# 165249259Sdimf_dialog_init 166249259Sdimf_dialog_title "$msg_toggle_startup_services" 167249259Sdimf_dialog_backtitle "${ipgm:+bsdconfig }$pgm" 168249259Sdimf_mustberoot_init 169249259Sdim 170249259Sdimwhile :; do 171249259Sdim dialog_menu_main 172249259Sdim retval=$? 173249259Sdim mtag=$( f_dialog_menutag ) 174249259Sdim 175249259Sdim [ $retval -eq 0 ] || f_die 176249259Sdim 177249259Sdim case "$mtag" in 178249259Sdim "X $msg_exit") break ;; 179249259Sdim *) # Anything else is an rcvar to toggle 180249259Sdim 181249259Sdim rcvar="${mtag# }" 182249259Sdim value=$( eval f_dialog_menutag2item${SHOW_DESC:+_with_help} \ 183249259Sdim \"\$mtag\" $RCVAR_MENU_LIST ) 184249259Sdim 185249259Sdim # Determine the new [toggled] value to use 186263509Sdim case "$value" in 187263509Sdim "[X]"*) value="NO";; 188263509Sdim *) value="YES";; 189263509Sdim esac 190249259Sdim 191263509Sdim err=$( f_sysrc_set "$rcvar" "$value" 2>&1 ) || 192263509Sdim f_show_msg "$err" 193263509Sdim esac 194249259Sdimdone 195249259Sdim 196249259Sdimexit $SUCCESS 197249259Sdim 198263509Sdim################################################################################ 199249259Sdim# END 200249259Sdim################################################################################ 201249259Sdim