-# Include it right within this scriptlet so that it needn't be installed.
-# Imbed it within a subshell to ensure that it won't impact this scriptlet.
-(
- # First, set bp2cf's command line arguments.
- set -- -u -f "${file}"
-
-#!/bin/sh
-###############################################################################
-# BRLTTY - A background process providing access to the Linux console (when in
-# text mode) for a blind person using a refreshable Braille display.
-#
-# Copyright (C) 1995-2003 by The BRLTTY Team. All rights reserved.
-#
-# BRLTTY comes with ABSOLUTELY NO WARRANTY.
-#
-# This is free software, placed under the terms of the
-# GNU General Public License, as published by the Free Software
-# Foundation. Please see the file COPYING for details.
-#
-# Web Page: http://mielke.cc/brltty/
-#
-# This software is maintained by Dave Mielke <dave@mielke.cc>.
-###############################################################################
-
-# Convert the boot parameter to configuration file directives.
-# If /proc is mounted then use the brltty= boot parameter in /proc/cmdline.
-# If /proc is not mounted then use the brltty environment variable.
-# Invoke with -h for usage information.
-
-programName="${0##*/}"
-programMessage()
-{
- echo 2>&1 "${programName}: ${1}"
-}
-syntaxError()
-{
- programMessage "${1}"
- exit 2
-}
-internalError()
-{
- programMessage "${1}"
- exit 3
-}
-
-configurationFile=""
-requestedAction=create
-deviceTranslation=none
-requestedParameter=""
-OPTIND=1
-while getopts ":f:cundop:h" option
-do
- case "${option}" in
- f) configurationFile="${OPTARG}";;
- c) requestedAction=create;;
- u) requestedAction=update;;
- n) deviceTranslation=none;;
- d) deviceTranslation=devfs;;
- o) deviceTranslation=old;;
- p) requestedParameter="${OPTARG}";;
- h)
- cat <<EOF
-Usage: ${programName} [option ...]
--f file The configuration file to create/update.
--c Create the configuration file (write to stdout if no -f).
--u Update the configuration file (copying from stdin to stdout if no -f).
--n Do not translate device paths.
--d Do old-style to devfs device path translation.
--o Do devfs to old-style device path translation.
--p [driver][,[device][,[table]]]
- Explicitly specify the boot parameter.
--h Display this usage summary.
-EOF
- exit 0
- ;;
- \?) syntaxError "unknown option: -${OPTARG}";;
- :) syntaxError "missing value: -${OPTARG}";;
- *) internalError "unimplemented option: -${option}";;
- esac
-done
-shift "`expr $OPTIND - 1`"
-[ "${#}" -eq 0 ] || syntaxError "too many parameters."
-
-case "${requestedAction}" in
- create)
- putConfigurationLine()
- {
- echo "${1}" || exit 4
- }
- startConfigurationFile()
- {
- [ -n "${configurationFile}" ] && exec >"${configurationFile}"
- putConfigurationLine "`makeHeaderLine Created`"
- putConfigurationLine "`makeParameterLine`"
- putConfigurationLine ""
- }
- putConfigurationDirective()
- {
- putConfigurationLine "${1} ${2}"
- }
- finalizeConfigurationFile()
- {
- :
- }
- ;;
- update)
- putSedCommand()
- {
- sedScript="${sedScript}
-${1}"
- }
- startConfigurationFile()
- {
- if [ -n "${configurationFile}" ]; then
- [ -e "${configurationFile}" ] || syntaxError "file not found: ${configurationFile}"
- [ -f "${configurationFile}" ] || syntaxError "not a file: ${configurationFile}"
- [ -r "${configurationFile}" ] || syntaxError "file not readable: ${configurationFile}"
- [ -w "${configurationFile}" ] || syntaxError "file not writable: ${configurationFile}"
- outputFile="${configurationFile}.new"
- exec <"${configurationFile}" >"${outputFile}"
- fi
- sedScript=""
- putSedCommand "1i\\
-`makeHeaderLine Updated`\\
-`makeParameterLine`\\
-"
- }
- putConfigurationDirective()
- {
- value="`echo "${2}" | sed -e 's%\\([/\\]\\)%\\\\\\1%g'`"
- putSedCommand "/^ *#\\(${1} .*\\)/s//\\1/"
- putSedCommand "/^ *\\(${1}\\) .*/s//\\1 ${value}/"
- }
- finalizeConfigurationFile()
- {
- sed -e "${sedScript}"
- [ -n "${outputFile}" ] && mv -f "${outputFile}" "${configurationFile}"
- }
- ;;
- *) internalError "unimplemented action: ${requestedAction}";;
-esac
-
-translateDevice_none()
-{
- :
-}
-translateDevice_devfs()
-{
- minor="${device#ttyS}"
- if [ "${minor}" != "${device}" ]; then
- device="tts/${minor}"
- return 0
- fi
- minor="${device#lp}"
- if [ "${minor}" != "${device}" ]; then
- device="printers/${minor}"
- return 0
- fi
- programMessage "unsupported old-style device: ${device}"
-}
-translateDevice_old()
-{
- major="${device%%/*}"
- if [ "${major}" != "${device}" ]; then
- minor="${device#*/}"
- case "${major}" in
- tts) devfs="ttyS${minor}";;
- printers) devfs="lp${minor}";;
- esac
- fi
- if [ -n "${devfs}" ]; then
- device="${devfs}"
- else
- programMessage "unsupported devfs device: ${device}"
- fi
-}
-
-makeHeaderLine()
-{
- echo "# ${1} by brltty-bp2cf`date +' on %Y-%m-%d at %H:%M:%S %Z (UTC%z)'`."
-}
-makeParameterLine()
-{
- echo "# Boot Parameter:${bootParameter}"
-}
-putConfigurationFile()
-{
- startConfigurationFile
- [ -n "${brailleDriver}" ] && putConfigurationDirective "braille-driver" "${brailleDriver}"
- [ -n "${brailleDevice}" ] && {
- device="`echo "${brailleDevice}" | sed -e 's%//*%/%g' -e 's%^/dev/%%'`"
- if [ "${device#/}" = "${device}" ]; then
- translateDevice_${deviceTranslation}
- fi
- putConfigurationDirective "braille-device" "${device}"
- }
- [ -n "${textTable}" ] && putConfigurationDirective "text-table" "${textTable}"
- finalizeConfigurationFile
-}
-parseBootParameter()
-{
- bootParameter="${bootParameter} ${1}"
- number=1
- while [ "${number}" -le 3 ]; do
- cut="cut -d, -f${number}"
- [ "${number}" -gt 1 ] && cut="${cut} -s"
- operand="`echo ${1} | ${cut}`"
- if [ -n "${operand}" ]; then
- case "${number}" in
- 1) brailleDriver="${operand}";;
- 2) brailleDevice="${operand}";;
- 3) textTable="${operand}";;
- esac
- fi
- number="`expr ${number} + 1`"
- done
-}
-putBootParameter()
-{
- parseBootParameter "${1}"
- putConfigurationFile
-}
-parseBootCommand()
-{
- found=false
- while [ "${#}" -gt 0 ]; do
- case "${1}" in
- "brltty="*)
- found=true
- parseBootParameter "${1#*=}"
- ;;
- esac
- shift
- done
- "${found}" && putConfigurationFile
-}
-
-brailleDriver=""
-brailleDevice=""
-textTable=""
-bootCommandFile="/proc/cmdline"
-if [ -n "${requestedParameter}" ]; then
- putBootParameter "${requestedParameter}"
-elif [ -f "${bootCommandFile}" ]; then
- parseBootCommand `cat "${bootCommandFile}"`
-elif [ -n "${brltty}" ]; then
- putBootParameter "${brltty}"
-fi
-exit 0
-)