Source list of "setconfig"

#! /bin/bash

# setconfig Ver. 0.001 (2008/07/20)
# Copyright (C) 2008 Adsaria

# This program is free software; you can redistribute it and/or modify it.
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY.

### Argument handling ##########################################################

ARGS_DEF_opt_char_flg="qv"
ARGS_DEF_opt_word_flg="help"
ARGS_DEF_arg_namelist="config_list"
ARGS_DEF_arg_num_must=0

. /usr/local/bin/shargs

if [ "${ARGS_error}" == "Y" ]; then echo "${ARGS_usage}" 1>&2 ; exit 1; fi
if [ "${ARGS_opt_help}" == "Y" ]; then echo "${ARGS_usage}" 1>&2 ; exit 1; fi
if [ "${ARGS_opt_q}" == "Y" ]; then QUIET="yes"; else QUIET="" ; fi
if [ "${ARGS_opt_v}" == "Y" ]; then CHATTY="yes"; else CHATTY="" ; fi
if [ "${QUIET}" == "yes" ]; then CHATTY=""; fi

### Define shell vars ##########################################################

CMD_NAME=`basename ${ARGS_0}`

### Define local functions #####################################################

function msg () {
        # Return Code 0: massage out, 1: message hold, 2: error
        ECHO_FLAG=
        if [ "${1}" == "-n" ]; then ECHO_FLAG="${ECHO_FLAG} -n"; shift; fi
        if [ -z "${1}" -o -z "${2}" ]; then return 2; fi
        MSG_CATEGORY="${1}"
        MSG_BODY="${2}"
        DO_ECHO="yes"
        case "${MSG_CATEGORY}" in
        II|I|ii|i)
                MSG_CATEGORY="II"
                if [ "${CHATTY}" != "yes" ]; then DO_ECHO="no"; fi
                ;;
        --|-)
                MSG_CATEGORY="--"
                if [ "${CHATTY}" != "yes" ]; then DO_ECHO="no"; fi
                ;;
        QQ|Q|qq|q)
                MSG_CATEGORY="QQ"
                ;;
        WW|W|ww|w)
                MSG_CATEGORY="WW"
                if [ "${QUIET}" == "yes" ]; then DO_ECHO="no"; fi
                ;;
        EE|E|ee|e)
                MSG_CATEGORY="EE"
                if [ "${QUIET}" == "yes" ]; then DO_ECHO="no"; fi
                ;;
        *)
                MSG_CATEGORY="XX"
                ;;
        esac
        if [ "${DO_ECHO}" == "yes" ]; then
                echo $ECHO_FLAG "(${MSG_CATEGORY}) $MSG_BODY" 1>&2
        fi
}

### Check arguments ############################################################

CONFIG_LIST_FILE=
if [ -n "${ARGS__config_list}" ]; then
	if [ "${ARGS__config_list}" != "-" ]; then
		if [ -f ${ARGS__config_list} ]; then
			CONFIG_LIST_FILE=${ARGS__config_list}
			exec < ${CONFIG_LIST_FILE}
		else
			msg e "\"${ARGS__config_list}\" does not exist or is not a file."
			exit 1
		fi
	fi
fi

################################################################################

while read SERVICE LEVEL0 LEVEL1 LEVEL2 LEVEL3 LEVEL4 LEVEL5 LEVEL6 ; do
	if [ -z "${SERVICE}" ]; then continue; fi
	if [ "${SERVICE::1}" == "#" ]; then continue; fi
	if [ "${SERVICE}" == "xinetd" ]; then
		msg i "ignoring \"xinetd\" services."
		break
	fi

	msg i "${SERVICE} ${LEVEL0} ${LEVEL1} ${LEVEL2} ${LEVEL3} ${LEVEL4} ${LEVEL5} ${LEVEL6}"
	if [ -x "/etc/init.d/${SERVICE}" ]; then
		for (( count = 0 ; count <= 6 ; count++ )); do
			eval "CURRENT=\$LEVEL${count}"
			if [ -z "${CURRENT}" ]; then continue; fi
			LEVEL=${CURRENT::1}
			ONOFF=${CURRENT:2}
			if [ ${LEVEL} -ge 0 -a ${LEVEL} -le 6 ]; then
				if [ ${ONOFF} == "on" -o ${ONOFF} == "off" ]; then
					chkconfig --level ${LEVEL} ${SERVICE} ${ONOFF}
				else
					msg w "switch must be \"on\" or \"off\""
				fi
			else
				msg w "level must be in 0..6"
			fi
		done
	else
		 msg w "service \"${SERVICE}\" does not installed."
	fi
done