#!/bin/sh # @(#) Tremulous starting # @(#) iekko # @(#) 2007-09-12 # --- Configuration # Informations NAME="$(basename "$0")" VERSION="0.1" AUTHOR="iekko " ACTION="Start Tremulous" # Variables TREMULOUS="/usr/local/bin/tremulous" LOG_DIR="$HOME/.tremulous/base/log" LOG_EXT=".log" LOG_FILE="$LOG_DIR/$(date '+%Y%m%d-%H%M%S')$LOG_EXT" SCREENSAVER_OFF="xscreensaver-command -exit" SCREENSAVER_ON="xscreensaver -no-splash &" ARCHIVER="gzip -q" ARC_EXT=".gz" # Filters COLOR_FILTER=" 2>&1 | sed 's/\^[0-9]//g'" # Default options CLEAN= FILTER="$COLOR_FILTER" HELP= LIST= PURGE= QUIET= SCREENSAVER=1 VER= # --- Functions # Show version function version { cat <&2 exit "$2" } # Show starting message function start { printf "%s..." "$1" } # Show success message function success { printf " ok\n" return 0 } # Show failure message function failure { printf " failure\n" return 1 } # Clean all logs function clean { start "cleaning all logs" find "$LOG_DIR" -type f -name "*$LOG_EXT$ARC_EXT" -print0 \ | xargs -r0 rm -f && success || failure } # List all logs function list { find "$LOG_DIR" -type f -name "*$LOG_EXT$ARC_EXT" -print0 \ | xargs -r0l -i{} basename {} "$LOG_EXT$ARC_EXT" } # Purge logs older than n days function purge { start "cleaning log older than $1 day(s)" find "$LOG_DIR" -type f -name "*$LOG_EXT$ARC_EXT" -mtime +"$1" -print0 \ | xargs -r0 rm -f && success || failure } # Turn off screensaver function screensaver_off { start "turning off screensaver" eval "$SCREENSAVER_OFF" > /dev/null 2>&1 && success || failure } # Turn on screensaver function screensaver_on { start "turning on screensaver" eval "$SCREENSAVER_ON" > /dev/null 2>&1 && success || failure } # Start Tremulous function start_tremulous { start "starting Tremulous" eval "$TREMULOUS $@" > "$LOG_FILE" 2>&1 && success || failure } # Archive log function archive { start "archiving log" eval "$ARCHIVER" "$LOG_FILE" && success || failure } # --- Options # Parsing while getopts :cfhlp:qsv options do case $options in c) CLEAN="1" ;; f) FILTER="$COLOR_FILTER" ;; h) HELP="1" ;; l) LIST="1" ;; p) PURGE="$OPTARG" ;; q) QUIET="1" ;; s) SCREENSAVER="1" ;; v) VER="1" ;; ?) ERR="1" ;; esac index="$OPTIND" done # --- Workflow [ "$ERR" = "1" ] && { error "bad option, try -h" 1 ; } [ "$HELP" = "1" ] && { help ; exit 0 ; } [ "$VER" = "1" ] && { version ; exit 0 ; } [ -d "$LOG_DIR" ] || mkdir "$LOG_DIR" || exit [ "$QUIET" = "1" ] && LOG_FILE=/dev/null [ "$CLEAN" = "1" ] && { clean ; exit ; } [ "$LIST" = "1" ] && { list ; exit ; } [ ! -z "$PURGE" ] && if let PURGE+=0 2> /dev/null then [ "$PURGE" -lt 0 ] \ && error "$PURGE : positive number required for -p option" 1 purge "$PURGE" exit else error "$PURGE : bad number for -p option" 1 fi let errno=0 if [ "$SCREENSAVER" = "1" ] then screensaver_off || let errno+=$? fi start_tremulous "$@" "$FILTER" || let errno+=$? if [ "$SCREENSAVER" = "1" ] then screensaver_on || let errno+=$? fi if [ ! "$QUIET" = "1" ] then archive || let errno+=$? fi exit "$errno"