diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/make-boot-splash | 4 | ||||
-rwxr-xr-x | scripts/switch-themes | 152 |
2 files changed, 155 insertions, 1 deletions
diff --git a/scripts/make-boot-splash b/scripts/make-boot-splash index e524606..bdbeca7 100755 --- a/scripts/make-boot-splash +++ b/scripts/make-boot-splash @@ -92,4 +92,6 @@ function write_header() source $config size=`wc -c<$image` write_header $tx $ty $tw $th $size >> $initrd_file -cat $image >> $initrd_file
\ No newline at end of file +cat $image >> $initrd_file + +$splash_dir/scripts/switch-themes -u diff --git a/scripts/switch-themes b/scripts/switch-themes new file mode 100755 index 0000000..dea6997 --- /dev/null +++ b/scripts/switch-themes @@ -0,0 +1,152 @@ +#!/bin/sh +# -*- Mode: shell-script -*- +# Copyright (C) 2002 by Chmouel Boudjnah <chmouel@mandrakesoft.com> +# Redistribution of this file is permitted under the terms of the GNU +# Public License (GPL) +# $Id$ + +bootsplashdir=/usr/share/bootsplash +sysconfig=/etc/sysconfig/bootsplash +bootdir=/boot + +function list_available_themes () { + local basename= + for i in $bootsplashdir/themes/*;do + basename=${i##*/} + echo $basename + done +} + +function get_current_theme () { + local opt= theme= + while read opt ;do + [[ $opt != THEME=* ]] && continue + theme=${opt##*=} + done < $sysconfig + [[ -z $theme ]] && theme="Mandrake" + echo $theme +} + +function read_link () { + perl -e '{print readlink shift, "\n"}' $1 +} + +function lilo_switch_themes () { + local theme=$1 + local message_from_theme=$bootsplashdir/themes/$theme/lilo/message + local message_from_current=$bootdir/lilo/message + + #checking + if [[ ! -f $message_from_theme ]];then + return; + fi + if [[ ! -e $bootdir/lilo ]];then + return; + fi + + #Make sure to point on lilo-graphic + if [[ -L $bootdir/lilo ]];then + point_to=$(read_link $bootdir/lilo) + if [[ $point_to != lilo-graphic ]];then + rm -f $bootdir/lilo + ln -s lilo-graphic $bootdir/lilo + fi + fi + + if ! cmp -s $message_from_theme $message_from_current;then + cp -f $message_from_theme $message_from_current + fi + +} + +function check_it () { + local theme=$1 + local ok= c= + + for c in $(list_available_themes);do + [[ $c == $theme ]] && ok=yes + done + if [[ -z $ok ]];then + echo -e "Themes $theme doen't exist\n"; + bash $0 -l + exit; + fi +} + +function update () { + local theme=$1; + lilo_switch_themes $theme +} + +function switch_theme () { + local toswitch=$1 + local current_theme=$(get_current_theme) + local ok= c= + + #Seeding + if [[ $current_theme != $toswitch ]];then + ok= + tmpfile=$(mktemp /tmp/.bootsplash.XXXXXXX) + cp -f $sysconfig $tmpfile && rm -f $sysconfig + while read line;do + if [[ $line == THEME=* ]];then + echo "THEME=$toswitch" >> $sysconfig + ok=yes + continue; + fi + echo $line >> $sysconfig + done < $tmpfile + if [[ -z $ok ]];then + echo "THEME=$toswitch" >> $sysconfig + fi + rm -f $tmpfile + fi +} + +function usage () { + basename=`basename $0` + cat <<EOF + $basename OPTIONS THEMES + +OPTIONS: + -c: Tell you the current themes + -l: List themes available. + -u: Update current theme. +EOF + exit 1 +} + +update= +while getopts uhlc opt;do + case "$opt" in + u) + update=yes ;; + c) + echo -n "The current theme is: ";get_current_theme; exit;; + l) + echo "Available themes are :" + for i in $(list_available_themes);do echo -e "\t\t\t$i";done; + exit; + ;; + h) usage;; + *) usage;; + esac +done +shift $((OPTIND - 1)) + +theme=$1 + +if [[ -n $update ]];then + if [[ -n $theme ]];then + echo "No argument when updating"; + echo + usage + fi + update $(get_current_theme) + exit; +fi + +[[ -z $theme ]] && usage; + +check_it $theme +switch_theme $theme |