diff options
Diffstat (limited to 'abs/core-testing/fbsplash/fbsplash-basic.sh')
-rw-r--r-- | abs/core-testing/fbsplash/fbsplash-basic.sh | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/abs/core-testing/fbsplash/fbsplash-basic.sh b/abs/core-testing/fbsplash/fbsplash-basic.sh new file mode 100644 index 0000000..2834060 --- /dev/null +++ b/abs/core-testing/fbsplash/fbsplash-basic.sh @@ -0,0 +1,201 @@ + +# /etc/rc.d/functions.d/fbsplash-basic.sh # + +# Basic Fbsplash script for Arch Linux initscripts # +# # +# Author: Kurt J. Bosch <kjb-temp-2009 at alpenjodel.de> # +# Based on the work of Greg Helton <gt at fallendusk.org> # +# Thomas Baechler <thomas at archlinux.org> # +# and others # +# # +# Distributed under the terms of the GNU General Public License (GPL) # + +[[ $PREVLEVEL && $RUNLEVEL ]] || return 0 + +# Do nothing if improved scripts are installed +[ -r /etc/rc.d/functions.d/fbsplash-extras.sh ] && return + +# Only do this where needed +# Since we use BASH, all important functions and variables are exported +case ${0#/etc/rc.} in sysinit | multi | shutdown ) + export SPLASH_PUSH_MESSAGES="no" + export SPLASH_VERBOSE_ON_ERRORS="no" + . /sbin/splash-functions.sh # /etc/conf.d/splash is also sourced by this + unset options opt i # eliminate splash_setup non local vars ## FIX ME ## + declare -ix SPLASH_STEPS=3 # sysinit steps + declare -ix SPLASH_STEPS_DONE=0 +esac + +# Verbose mode is handled by fbcondecor kernel patch and daemon script +[[ $SPLASH_MODE_REQ = silent ]] || return 0 + +# Override - Don't try to use /usr/bin/basename +splash_comm_send() { + [[ $( /bin/pidof -o %PPID $spl_daemon ) ]] && echo "$@" >$spl_fifo & +} + +case $0 in /etc/rc.sysinit ) + # Prevent splash destruction + CONSOLEFONT="" + # Continue to use a splash daamon started in initcpio + if /bin/mountpoint -q /dev/.splash-cache; then + /bin/mount --move /dev/.splash-cache $spl_cachedir || return + splash_comm_send set message "$SPLASH_BOOT_MESSAGE" + # Mount a tmpfs + else + ( splash_cache_prep ) || return + fi + add_hook sysinit_udevsettled splash_sysinit_udevsettled + add_hook sysinit_postfsck splash_sysinit_postfsck + add_hook sysinit_postfsckloop splash_sysinit_postfsck + add_hook sysinit_premount splash_sysinit_premount + add_hook sysinit_end splash_sysinit_end + splash_sysinit_udevsettled() { + splash_begin + splash_progress_init + splash_progress + } + splash_sysinit_premount() { + splash_progress + } + splash_sysinit_postfsck() { # fsck failure emergency exit + [ ${fsckret} -gt 1 -a ${fsckret} -ne 32 ] && chvt 1 + } + splash_sysinit_end() { + splash_progress + } +;; /etc/rc.multi ) + add_hook multi_start splash_multi_start + add_hook multi_end splash_multi_end + splash_multi_start() { + SPLASH_STEPS_DONE=$SPLASH_STEPS + splash_progress_init + } + start_daemon() { + [[ $1 = $SPLASH_XSERVICE ]] && SPLASH_EXIT_TYPE=staysilent splash_stop + /etc/rc.d/$1 start + splash_progress + } + start_daemon_bkgd() { + [[ $1 = $SPLASH_XSERVICE ]] && SPLASH_EXIT_TYPE=staysilent splash_stop + stat_bkgd "Starting $1" + ( SPLASH_PUSH_MESSAGES="no" SPLASH_VERBOSE_ON_ERRORS="no" \ + /etc/rc.d/$1 start ) &>/dev/null & + } + splash_multi_end() { + if [[ $PREVLEVEL = N ]]; then + if ! in_array "$SPLASH_XSERVICE" "${DAEMONS[@]}"; then + if [[ $RUNLEVEL = 5 ]]; then + SPLASH_EXIT_TYPE=staysilent splash_stop + else + splash_stop + [[ $( $spl_bindir/fgconsole ) = $SPLASH_TTY ]] && chvt 1 + fi + fi + # Now do setfont + set_consolefont + # Umount the tmpfs + splash_cache_cleanup + fi + } +;; /etc/rc.shutdown ) + ( splash_cache_prep ) || return + # Not using XSERVICE here to avoid missing errors - X should chvt back to SPLASH_TTY + add_hook shutdown_start splash_shutdown_start + add_hook shutdown_prekillall splash_shutdown_prekillall + add_hook shutdown_postkillall splash_shutdown_postkillall + add_hook shutdown_poweroff splash_shutdown_poweroff + splash_shutdown_start() { + splash_begin + } + ## http://bugs.archlinux.org/task/10536 ## FIX ME ## + splash_shutdown_prekillall() { /bin/sleep .1; } + splash_shutdown_postkillall() { + if [[ $( $spl_bindir/fgconsole ) = $SPLASH_TTY ]]; then + stat_busy "Restarting Fbsplash daemon" + PROGRESS=$(( 65535*2/3 )) splash_start + if [[ -e $spl_cachedir/stop_failed-fbsplash-dummy ]]; then + splash_comm_send update_svc fbsplash-dummy svc_stop_failed + fi + stat_done + fi + } + ## + splash_shutdown_poweroff() { + SPLASH_EXIT_TYPE=staysilent splash_stop + } +esac + +splash_progress_init() { + for daemon in "${DAEMONS[@]}"; do + case $daemon in $SPLASH_XSERVICE | @$SPLASH_XSERVICE ) break + ;; \!* |@* ) continue + esac + SPLASH_STEPS+=1 + done +} + +splash_progress() { + splash_comm_send progress $(( 65535*++SPLASH_STEPS_DONE/SPLASH_STEPS )) + splash_comm_send paint +} + +# Start the splash daemon - using upstream function +splash_set_event_dev() { :; } # override - Never grab the keyboard +splash_begin() { + if ! [[ $( /bin/pidof -o %PPID $spl_daemon ) ]]; then + stat_busy "Starting Fbsplash daemon" + if [ -x /etc/splash/$SPLASH_THEME/scripts/rc_init-pre ]; then + /etc/splash/$SPLASH_THEME/scripts/rc_init-pre ${0#/etc/rc.d} $RUNLEVEL + fi && + splash_start && + stat_done || stat_fail + fi +} + +# Stop the splash daemon - if any +splash_stop() { + if [[ $( /bin/pidof -o %PPID $spl_daemon ) ]]; then + SPLASH_PUSH_MESSAGES="no" stat_busy "Stopping Fbsplash daemon" + splash_comm_send progress 65535; splash_comm_send paint; /bin/sleep .1 + splash_comm_send exit $SPLASH_EXIT_TYPE + # Wait for painting/fadeout + local -i i=0 + while [[ i++ -lt 100 && $( /bin/pidof -o %PPID $spl_daemon ) ]]; do + /bin/sleep .1 + done + stat_done + fi +} + +stat_busy() { + printf "${C_OTHER}${PREFIX_REG} ${C_MAIN}${1}${C_CLEAR} " + printf "${SAVE_POSITION}" + deltext + printf " ${C_OTHER}[${C_BUSY}BUSY${C_OTHER}]${C_CLEAR} " + SPLASH_BUSY_MSG=$1 + if [[ $SPLASH_PUSH_MESSAGES = yes ]]; then + splash_comm_send set message "${1}" + splash_comm_send paint + fi +} + +stat_fail() { + deltext + printf " ${C_OTHER}[${C_FAIL}FAIL${C_OTHER}]${C_CLEAR} \n" + local event=stop_failed; [[ $PREVLEVEL = N ]] && event=start_failed + # Provide a general failure status event and write to msglog textbox + splash_comm_send update_svc fbsplash-dummy svc_${event} + splash_comm_send log "Error $SPLASH_BUSY_MSG" + splash_comm_send paint + # Save for daemon restart ## FIX ME ## + if /bin/mountpoint -q $spl_cachedir; then + : >|$spl_cachedir/${event}-fbsplash-dummy + fi + # Upstream way of error handling + if [[ $SPLASH_VERBOSE_ON_ERRORS = yes ]]; then + chvt 1 + fi +} + +# EOF # |