1
  "   ˆl–Ðz¾”êj"Tâ€jàY¸ ©‹FÿÉƒm—�¿Æ     #!/usr/bin/sh
#
# ADD.MODULES, Adds $ETC/*.modules to the $HOME/.login, .cshrc, .profile,
#              .bashrc & .kshenv
# Copyright (C) 2000-2017 R.K. Owen
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

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

VERSION='$Id: 196cf1d4fbd7d3deecf648e85ee37ead75a60a93 $'
SKEL=/etc/skel
ETC=/skel
/bin/cat <<!

$0
	adds a few lines to the beginning of your
	$HOME/.cshrc, $HOME/.login,
	$HOME/.profile, $HOME/.bashrc, and
	possibly your $HOME/.kshenv (or whatever is
	specified by the ENV environment variable).
!
if [ -r "$HOME/.bash_profile" ]; then
	/bin/cat <<!
	Also your $HOME/.bash_profile will be processed.
!
fi
if [ -r "$HOME/.bash_login" ]; then
	/bin/cat <<!
	Also your $HOME/.bash_login will be processed.
!
fi
/bin/cat <<!
	The lines are prepended for sourcing the $ETC/csh.modules or
	$ETC/profile.modules files or to define the module alias or function.
	Why is it necessary?
	To ensure that you will have access to modules for all subshells,
	these lines need to be added to some of your 'dot' files.

	Your old .cshrc, .login, .profile, .bashrc and .kshenv will be
	renamed to .login.old, .cshrc.old, .profile.old, .bashrc.old and
	.kshenv.old respectively.  So if you have any problems you will
	can easily restore them.

	This is version $VERSION .

!

/bin/echo "Continue on (type n for no - default=yes)?\c"
read xxx

if [ x"$xxx" = xn ]
then
	exit 1
fi

# cleanse old dot file $1=file $2=clean temporary $3=file.old
cleandot() {
	/bin/cat <<!
Cleaning $1
!
	mv "$1" "$3"
	sed \
-e "/^[ 	]*if[ 	]*([ 	]*-e[ 	].*\/csh\.modules[ 	]*)[ 	]*then[ 	]*\$/,/^[	]*endif[ 	]*\$/d" \
-e "/^[ 	]*if[ 	]*\[[ 	]*-[ef][ 	].*\/profile\.modules[ 	]*][ 	]*\$/,/^[ 	]*fi[ 	]*\$/d" \
-e "/^[ 	]*if[ 	]*\[[ 	]*-[ef][ 	].*\/profile\.modules[ 	]*].*then[ 	]*\$/,/^[ 	]*fi[ 	]*\$/d" \
-e "/^[ 	]*if[ 	]*([ 	]*\$?tcsh[ 	]*)[ 	]*then[ 	]*\$/,/^[ 	]*alias[ 	]*module[ 	]*.*\$/d" \
-e "/^[ 	]*module().*[ 	]*.*}[ 	]*\$/d" \
-e "/^[ 	]*case[ 	]*\"\$0\"[ 	]*in[ 	]*\$/,/^[ 	]*esac[ 	]*\$/d" \
-e "/^[ 	]*source[ 	]*.*\/Modules.*\$/d" \
-e "/^[ 	]*source[ 	]*.*\/csh\.modules[ 	]*/d" \
-e "/^[ 	]*\.[ 	]*.*\/profile\.modules[ 	]*/d" \
	"$3" > "$2"
}

# find if certain of the dot files have load lines already
findload() {
	grep "^[ 	]*module[ 	]*load" "$1" > /tmp/load.$$
}

# put common stuff derivatives here $1=.dot_file $2=action $3=shell(csh,sh) $4=skel alternative
shdot() {
	if [ -f "$1" ]
	then
		/bin/cat <<!

Processing your $1 (your old one is $1.old)
!
		if cleandot "$1" "/tmp/$1.$$" "$1.old"
		then
			if [ x"$2" = xsource ]
			then
				/bin/cat <<!
Adding sourcing lines at beginning of "$1"
!
				if [ x"$3" = xsh ]
				then
					findload "$1.old"
					/bin/cat > "$1" <<!
if [ -f $ETC/profile.modules ]
then
	. $ETC/profile.modules
# put your own module loads here
!
				if [ -s /tmp/load.$$ ]
				then
					/bin/cat /tmp/load.$$ >> "$1"
				else
					/bin/cat >> "$1" <<!
	module load null
!
				fi
					/bin/cat >> "$1" <<!
fi
!
				elif [ x"$3" = xcsh ]
				then
					findload "$1.old"
					/bin/cat > "$1" <<!
if ( -e $ETC/csh.modules ) then
	source $ETC/csh.modules
# put your own module loads here
!
				if [ -s /tmp/load.$$ ]
				then
					/bin/cat /tmp/load.$$ >> "$1"
				else
					/bin/cat >> "$1" <<!
	module load null
!
				fi
					/bin/cat >> "$1" <<!
endif
!
				fi
				/bin/cat "/tmp/$1.$$" >> "$1" && /bin/rm "/tmp/$1.$$"
			elif [ x"$2" = xalias ]
			then
		