#!/bin/sh
# This is a shell library to interface to the Debian configration management
# system.

###############################################################################
# Initialization.

# Check to see if a FrontEnd is running.
if [ ! "$DEBIAN_HAS_FRONTEND" ]; then
	PERL_DL_NONLAZY=1
	export PERL_DL_NONLAZY
	# Since there is no FrontEnd, this program execs a FrontEnd.
	# It will then run a new copy of $0 that can talk to it.
	exec /usr/share/debconf/frontend $0 "$@"
fi

# Only do this once.
if [ -z "$DEBCONF_REDIR" ]; then
	# Redirect standard output to standard error. This prevents common
	# mistakes by making all the output of the postinst or whatever
	# script is using this library not be parsed as confmodule commands.
	#
	# To actually send something to standard output, send it to fd 3.
	exec 3>&1 1>&2
	DEBCONF_REDIR=1
	export DEBCONF_REDIR
fi

###############################################################################
# Commands.

_db_cmd () {
	echo "$@" >&3
	# Set to newline to get whole line.
	local IFS='
'
	local _LINE
	read -r _LINE
	# Disgusting, but it's the only good way to split the line,
	# preserving all other whitespace.
	RET="${_LINE#[! 	][ 	]}"
	return ${_LINE%%[ 	]*}
}

db_capb ()	{ _db_cmd "CAPB $@"; }
db_set ()	{ _db_cmd "SET $@"; }
db_reset ()	{ _db_cmd "RESET $@"; }
db_title ()	{ _db_cmd "TITLE $@"; }
db_input ()	{ _db_cmd "INPUT $@"; }
db_beginblock () { _db_cmd "BEGINBLOCK $@"; }
db_endblock () 	{ _db_cmd "ENDBLOCK $@"; }
db_go ()	{ _db_cmd "GO $@"; }
db_get ()	{ _db_cmd "GET $@"; }
db_register ()	{ _db_cmd "REGISTER $@"; }
db_unregister () { _db_cmd "UNREGISTER $@"; }
db_subst ()	{ _db_cmd "SUBST $@"; }
db_fset ()	{ _db_cmd "FSET $@"; }
db_fget ()	{ _db_cmd "FGET $@"; }
db_purge ()	{ _db_cmd "PURGE $@"; }
db_metaget ()	{ _db_cmd "METAGET $@"; }
db_version ()	{ _db_cmd "VERSION $@"; }
db_clear ()	{ _db_cmd "CLEAR $@"; }
db_settitle ()	{ _db_cmd "SETTITLE $@"; }
db_previous_module () { _db_cmd "PREVIOUS_MODULE $@"; }

# An old alias for input.
db_text () {
	db_input $@
}

# Cannot read a return code, since there is none and it would block.
db_stop () {
	echo STOP >&3
}
