#!/bin/bash # $Id: rc_init-pre,v 0.9.3 2006/01/28 17:00:00 wolfwood Exp $ # # rc_init-pre 0.9.3 - A splashutils icon handler script for gentoo-livecd-2006.0. # http://starwind.homelinux.com/ # # Copyright (c) 2005-2006 Blackace Enterprises # # This program is free software; you can redistribute it and/or # modify it under the terms of the Artistic License as approved # by the Open Source Initiative. # # THIS PACKAGE IS PROVIDED AS IS AND WITHOUT ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. See the # Artistic License as approved by the Open Source Initiative for # details. # # SCRIPT COMMANDS C_BASH="/bin/bash" C_CP="/bin/cp" C_FBRES="/sbin/fbres" C_MKDIR="/bin/mkdir" C_MOUNT="/bin/mount" C_MV="/bin/mv" C_SED="/bin/sed" C_TOUCH="/bin/touch" C_UMOUNT="/bin/umount" # SCRIPT OPTIONS O_LOGINFO="/bin/cat >/dev/console" O_LOGERR="/bin/cat >/dev/console" # SCRIPT PROPERTIES P_ERROR="0" P_THEMEDIR="/etc/splash/${SPLASH_THEME}/" P_TEMPDIR="${P_THEMEDIR%/}/temp/" P_ICONW="72" P_ICONH="72" P_ICONX="0" P_ICONY="-72" P_ICONS=" $( \ for file in ${P_THEMEDIR%/}/icons/unlit_*.png; do file="${file##*/}" file="${file#unlit_}" echo -n "${file%.png} " done \ )" # SCRIPT ERROR CODES E_OPT="65" E_RESOLUTION="1" E_TEMPDIR="2" E_SVCDIR="3" # FUNCTIONS log() { if [ "${1}" = "info" ]; then if [ -n "${O_LOGINFO}" -a -x "${O_LOGINFO%% *}" ]; then echo "${2}" | eval ${O_LOGINFO} else echo "${2}" fi fi if [ "${1}" = "err" ]; then if [ -n "${O_LOGERR}" -a -x "${O_LOGERR%% *}" ]; then echo "${2}" | eval ${O_LOGERR} else echo "${2}" >&2 fi fi if [ "${1}" != "info" -a "${1}" != "err" ]; then return 1 fi return 0 } . /sbin/functions.sh if [ -z "${1}" ]; then log err "no internal runlevel provided" exit "${E_OPT}" elif [ "${1}" != "sysinit" -o "${RUNLEVEL}" != "S" ]; then exit 0 fi P_RESOLUTION="$($C_FBRES)" if [ -n "${P_RESOLUTION}" -a -n "${P_ICONW}" -a -n "${P_ICONH}" -a -n "${P_ICONX}" -a -n "${P_ICONY}" ]; then if [ "${P_ICONX:0:1}" = "-" ]; then P_ICONX="$((${P_RESOLUTION%x*} - ${P_ICONX:1}))" elif [ "${P_ICONX:0:1}" = "+" ]; then P_ICONX="${P_ICONX:1}" fi if [ "${P_ICONY:0:1}" = "-" ]; then P_ICONY="$((${P_RESOLUTION#*x} - ${P_ICONY:1}))" elif [ "${P_ICONY:0:1}" = "+" ]; then P_ICONY="${P_ICONY:1}" fi else log err "failed to configure resolution and icon positioning" exit "${E_RESOLUTION}" fi if [ ! -d "${P_TEMPDIR%/}/" ]; then $C_MKDIR "${P_TEMPDIR%/}/" && $C_TOUCH "${P_TEMPDIR%/}/.keep" if [ "$?" -ne "0" ]; then log err "failed to make tempdir" exit "${E_TEMPDIR}" fi fi if [ "${P_ERROR}" -eq "0" ]; then $C_MOUNT -t tmpfs none "${P_TEMPDIR%/}/" if [ "$?" -ne "0" ]; then log err "failed to mount tempdir" P_ERROR="${E_TEMPDIR}" fi fi if [ "${P_ERROR}" -eq "0" ]; then $C_CP -dpRx $(for file in ${P_THEMEDIR%/}/*; do if [ "${file##*/}" != "temp" ]; then echo -n "${file} "; fi; done) "${P_TEMPDIR%/}/" if [ "$?" -ne "0" ]; then log err "failed to populate tempdir" P_ERROR="${E_TEMPDIR}" fi fi if [ "${P_ERROR}" -eq "0" ]; then $C_CP "${P_TEMPDIR%/}/${P_RESOLUTION}.cfg" "${P_TEMPDIR%/}/${P_RESOLUTION}-core.cfg" if [ "$?" -ne "0" ]; then log err "failed to populate tempdir" P_ERROR="${E_TEMPDIR}" fi fi if [ "${P_ERROR}" -eq "0" ]; then P_SERVICES="$(splash_svclist_get start)" for service in ${P_SERVICES}; do if [ -z "${P_ICONS/* ${service} */}" ]; then echo -e "icon icons/unlit_${service}.png ${P_ICONX} ${P_ICONY} svc_start ${service}\nicon icons/unlit_${service}.png ${P_ICONX} ${P_ICONY} svc_inactive_start ${service}" >>"${P_TEMPDIR%/}/${P_RESOLUTION}.cfg" if [ "${P_ICONX}" -eq "0" ]; then echo -e "icon icons/lit_${P_RESOLUTION}_${P_ICONX}.png ${P_ICONX} $((${P_ICONY} - 34)) svc_started ${service}\nicon icons/lit_${P_RESOLUTION}_${P_ICONX}.png ${P_ICONX} $((${P_ICONY} - 34)) svc_start_failed ${service}" >>"${P_TEMPDIR%/}/${P_RESOLUTION}.cfg" else echo -e "icon icons/lit_${P_RESOLUTION}_${P_ICONX}.png $((${P_ICONX} - 4)) $((${P_ICONY} - 34)) svc_started ${service}\nicon icons/lit_${P_RESOLUTION}_${P_ICONX}.png $((${P_ICONX} - 4)) $((${P_ICONY} - 34)) svc_start_failed ${service}" >>"${P_TEMPDIR%/}/${P_RESOLUTION}.cfg" fi P_ICONX="$((${P_ICONX} + ${P_ICONW}))" fi if [ "$((${P_ICONX} + ${P_ICONW}))" -gt "$((${P_RESOLUTION%x*} - 40))" ]; then break fi done fi if [ "${P_ERROR}" -eq "0" ]; then $C_MOUNT --move "${P_TEMPDIR%/}" "${P_THEMEDIR%/}" if [ "$?" -ne "0" ]; then $C_UMOUNT -l "${P_TEMPDIR%/}/" 2>/dev/null $C_UMOUNT -l "${P_THEMEDIR%/}/" 2>/dev/null log err "failed to move tempdir mount" P_ERROR="${E_TEMPDIR}" fi else $C_UMOUNT -l "${P_TEMPDIR%/}/" 2>/dev/null fi exit "${P_ERROR}"