#!/bin/sh
# 
# apmd_proxy - program dispatcher for APM daemon
#
# Written by Craig Markwardt (craigm@lheamail.gsfc.nasa.gov) 21 May 1999
# Modified for Debian by Avery Pennarun
#
# This shell script is called by the APM daemon (apmd) when a power
# management event occurs.  Its first and second arguments describe the
# event.  For example, apmd will call "apmd_proxy suspend system" just
# before the system is suspended.
#
# Here are the possible arguments:
#
# start              - APM daemon has started
# stop               - APM daemon is shutting down
# suspend critical   - APM system indicates critical suspend (++)
# suspend system     - APM system has requested suspend mode
# suspend user       - User has requested suspend mode
# standby system     - APM system has requested standby mode 
# standby user       - User has requested standby mode
# resume suspend     - System has resumed from suspend mode
# resume standby     - System has resumed from standby mode
# resume critical    - System has resumed from critical suspend
# change battery     - APM system reported low battery
# change power       - APM system reported AC/battery change
# change time        - APM system reported time change (*)
# change capability  - APM system reported config. change (+)
#
# (*) - APM daemon may be configured to not call these sequences
# (+) - Available if APM kernel supports it.
# (++) - "suspend critical" is never passed to apmd from the kernel,
#   so we will never see it here.  Scripts that process "resume
#   critical" events need to take this into account.
#
# It is the proxy script's responsibility to examine the APM status
# (via /proc/apm) or other status and to take appropriate actions.
# For example, the script might unmount network drives before the
# machine is suspended.
#
# In Debian, the usual way of adding functionality to the proxy is to
# add a script to /etc/apm/event.d.  This script will be called by
# apmd_proxy (via run-parts) with the same arguments.
#
# If it is important that a certain set of script be run in a certain
# order on suspend and in a different order on resume, then put all
# the scripts in /etc/apm/scripts.d instead of /etc/apm/event.d and
# symlink to these from /etc/apm/suspend.d, /etc/apm/resume.d and
# /etc/apm/other.d using names whose lexicographical order is the same
# as the desired order of execution.
#
# If the kernel's APM driver supports it, apmd_proxy can return a non-zero
# exit status on suspend and standby events, indicating that the suspend
# or standby event should be rejected.
#
# *******************************************************************

set -e

# The following doesn't yet work, because current kernels (up to at least
# 2.4.20) do not support rejection of APM events.  Supporting this would
# require substantial modifications to the APM driver.  We will re-enable
# this feature if the driver is ever modified.       -- cph@debian.org
#
#SUSPEND_ON_AC=false
#[ -r /etc/apm/apmd_proxy.conf ] && . /etc/apm/apmd_proxy.conf
#
#if [ "${SUSPEND_ON_AC}" = "false" -a "${2}" = "system" ] \
#	&& on_ac_power >/dev/null; then
#    # Reject system suspends and standbys if we are on AC power
#    exit 1  # Reject (NOTE kernel support must be enabled)
#fi

if [ "${1}" = "suspend" -o "${1}" = "standby" ]; then
    run-parts -a "${1}" -a "${2}" /etc/apm/event.d
    if [ -d /etc/apm/suspend.d ]; then
        run-parts -a "${1}" -a "${2}" /etc/apm/suspend.d
    fi
elif [ "${1}" = "resume" ]; then
    if [ -d /etc/apm/resume.d ]; then
        run-parts -a "${1}" -a "${2}" /etc/apm/resume.d
    fi
    run-parts -a "${1}" -a "${2}" /etc/apm/event.d
else
    run-parts -a "${1}" -a "${2}" /etc/apm/event.d
    if [ -d /etc/apm/other.d ]; then
        run-parts -a "${1}" -a "${2}" /etc/apm/other.d
    fi
fi

exit 0
